728x90
⚠️ 내맘대로 작성한 코드이기 때문에 비합리적 진행과 근거없는 추론이 있을 수 있습니다!⚠️
https://www.acmicpc.net/problem/10815
Code
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Main {
Scanner scanner = new Scanner(System.in);
int n, m;
Set<Integer> nList = new HashSet<>();
ArrayList<Integer> mList = new ArrayList<>();
void run(){
n = scanner.nextInt();
for(int i = 0 ; i < n; i++){
nList.add(scanner.nextInt());
}
m = scanner.nextInt();
for(int i = 0; i<m; i++){
if(nList.contains(scanner.nextInt())){
mList.add(1);
}
else{
mList.add(0);
}
}
print();
}
void print(){
for(Integer mList : mList){
System.out.print(mList + " ");
}
}
public static void main(String[] args) {
Main my = new Main();
my.run();
}
}
Code 필수 요소
1. 두 카드 비교 방법
2. 속도 향상 방법
이것만 생각해내면 절반은 끝났다.
// 두 카드 비교 방법
두 카드들을 리스트를 이용해서 목록에 저장 시킨 후, 두 요소를 비교하면 된다.
// 속도 향상 방법
처음에는 두개의 리스트를 이용해서 contains를 이용해서 값이 존재하는지 비교하려 했다. 근데 시간 초과 뜨더라. 그래서 리스트보다 속도가 빠른 맵을 이용해서 비교했다.
// 전체적 설명
n을 입력 받은 후 그 횟수만큼 for문을 사용하고, map에 넣어준다. m도 입력받은 후 for문을 사용한다. 이때, if문 내부에 nList 내부에 값을 포함하고 있는지 contains를 사용해서 존재한다면 1을 add하고, 아니라면 0을 add한다. 그 후 출력시켜주면 끝.
알고리즘 자체는 정말 쉬웠다. 근데 골머리 썩은건 시간 초과. 리스트랑 리스트를 하니까 시간초과나서 해결방법 고민하는데 시간을 좀 많이 썼다. 그래서 List보다 빠른 map을 사용했고, 해결했다. 다 끝내고 다른 사람들 코드를 보니까 n을 정렬한 후 이분탐색으로 해결하더라. 오... 생각도 못했다ㅎ
-꿑-
728x90