[백준/JAVA] 10815번 숫자카드

정은아·2024년 1월 27일
post-thumbnail

내 풀이 1 : 엉망진창 배열 덕지덕지 설계, 제출도 안함

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {

        // 1. 테스트케이스를 입력받는다.
        // 2. ArrayList<>를 만들고 기본값을 0을 준다.
        // 3. contains()를 사용해서 있으면 값을 1로 변경한다.

        Scanner sc = new Scanner(System.in);
        StringBuilder sb = new StringBuilder();

        int num = sc.nextInt();
        int [] arr = new int [num];

        for (int i = 0; i < num; i++) {
            arr[i] = sc.nextInt();
        }

        int num2 = sc.nextInt();
        int [] arr2 = new int [num2];

        for (int i = 0; i < num2; i++) {
            arr2[i] = sc.nextInt();
        }

        List<Integer> list = new ArrayList<>();
        List<Integer> answer = new ArrayList<>();

        for (int i = 0; i < num; i++) {
            list.add(arr[i]);
        }

        for (int i = 0; i < num2; i++) {
            if (list.contains(arr2[i])){
                answer.add(1);
            }else{
                answer.add(0);
            }
        }

        for (Integer integer : answer) {
            sb.append(integer + " ");
        }

        System.out.println(sb.toString());
    }
}

내 풀이 2 : 시간초과

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {

        // 1. 테스트케이스를 입력받는다.
        // 2. ArrayList<>를 만들고 기본값을 0을 준다.
        // 3. contains()를 사용해서 있으면 값을 1로 변경한다.

        Scanner sc = new Scanner(System.in);
        StringBuilder sb = new StringBuilder();

        int num = sc.nextInt();
        List<Integer> list = new ArrayList<>();

        for (int i = 0; i < num; i++) {
            list.add(sc.nextInt());
        }

        int num2 = sc.nextInt();
        List<Integer> compare = new ArrayList<>();

        for (int i = 0; i < num2; i++) {
            compare.add(sc.nextInt());
        }

        List<Integer> answer = new ArrayList<>();

        for (int i = 0; i < num2; i++) {
            if (list.contains(compare.get(i))){
                sb.append("1 ");
            }else{
                sb.append("0 ");
            }
        }

        System.out.println(sb.toString());
    }
}

내 풀이 3 : 시간초과

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {

        // 1. 테스트케이스를 입력받는다.
        // 2. ArrayList<>를 만들고 기본값을 0을 준다.
        // 3. contains()를 사용해서 있으면 값을 1로 변경한다.

        Scanner sc = new Scanner(System.in);
        StringBuilder sb = new StringBuilder();

        int num = sc.nextInt();
        List<Integer> list = new ArrayList<>();

        for (int i = 0; i < num; i++) {
            list.add(sc.nextInt());
        }

        int num2 = sc.nextInt();

        for (int i = 0; i < num2; i++) {
            if (list.contains(sc.nextInt())){
                sb.append("1 ");
            }else{
                sb.append("0 ");
            }
        }

        System.out.println(sb.toString());
    }
}

내 풀이 : 정답

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {

        // 1. 테스트케이스를 입력받는다.
        // 2. ArrayList<>를 만들고 기본값을 0을 준다.
        // 3. contains()를 사용해서 있으면 값을 1로 변경한다.

        Scanner sc = new Scanner(System.in);
        StringBuilder sb = new StringBuilder();

        int num = sc.nextInt();
        Map<Integer, Integer> list = new HashMap<>();

        for (int i = 0; i < num; i++) {
            list.put(sc.nextInt(), 0);
        }

        int num2 = sc.nextInt();

        for (int i = 0; i < num2; i++) {
            if (list.containsKey(sc.nextInt())){
                sb.append("1 ");
            }else{
                sb.append("0 ");
            }
        }

        System.out.println(sb.toString());
    }
}

느낀점

시간초과를 대비하기 위해서 StringBuilder()를 사용하기 시작했는데,
StringBuilder()도 시간초과가 난다는 것을 알고 조금 충격받은 문제다.
ArrayLsist가 무겁다는 것은 알고 있었지만, 코테에서 이런 문제를 만나게 된다면
무조건 탈락하겠구나 싶어 아찔했다.
3번째 시도까지는 ArrayList로 코드를 최적화했고, 그래도 시간초과가 나서
ArrayList를 HashMap으로 바꿔서 정답을 맞혔다.
기억하자. HashMap은 빠르다!

profile
꾸준함의 가치를 믿는 개발자

0개의 댓글