본문 바로가기
백준 문제풀이

[백준] 10815번

by Dodledd 2024. 4. 1.

이 문제는 딱 보니 이분탐색이나 HashMap구조를 사용하면 될 것 같았다.

필자는 HashMap을 사용하는게 좀 더 편할 것 같아서 HashMap으로 풀었다.(HashMap안에 메서드 이용하기 위함)

필수로 알아야 할 HashMap의  메서드는

  • (HashMap객체명).put
    HashMap에 값 넣기
  • (HashMap객체명).containkey
    HashMap의 키 값중에 내가 넣어준 것과 일치하는 키가 있는가 ?   -> ture/false 반환

을 이용해서 풀었다.

 

이게 생각나는대로 막 짜서 풀었던 결과이지만 마음에 들지않아 한 번 리팩터링을 하였다

import java.io.*;
import java.util.HashMap;
import java.util.StringTokenizer;

public class b10815 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int n = Integer.parseInt(br.readLine());
        HashMap<Integer, Integer> hmap = new HashMap<>();
        int[] arrN = new int[n];
        StringTokenizer stN = new StringTokenizer(br.readLine());

        int m = Integer.parseInt(br.readLine());
        int[] arrM = new int[m];
        StringTokenizer stM = new StringTokenizer(br.readLine());

        for(int i = 0; i<n; i++){
            arrN[i]=Integer.parseInt(stN.nextToken());
            hmap.put(arrN[i],1);
        }
        for(int i = 0; i<m; i++){
            arrM[i]=Integer.parseInt(stM.nextToken());
            if(hmap.containsKey(arrM[i])){
                System.out.print(1+" ");
            } else {
                System.out.print(0+" ");
            }
        }


    }
}

 

 

 

리팩터링 후

import java.io.*;
import java.util.HashMap;
import java.util.StringTokenizer;

public class b10815 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        HashMap<String, Integer> hmap = new HashMap<>();
        String[] arrN = new String[n];
        StringTokenizer st = new StringTokenizer(br.readLine());

        for(int i = 0; i<n; i++){
            arrN[i]=st.nextToken();
            hmap.put(arrN[i],1);
        }

        int m = Integer.parseInt(br.readLine());
        String[] arrM = new String[m];
        st = new StringTokenizer(br.readLine());

        for(int i = 0; i<m; i++){
            arrM[i]=st.nextToken();
            if(hmap.containsKey(arrM[i])){
                System.out.print(1+" ");
            } else {
                System.out.print(0+" ");
            }
        }


    }
}

사실 크게 달라진 것은 없고 리소스 낭비될 것 같은 코드(합칠 수 있는 코드) 들을 정리해주었다.

 

1번과 2번 속도차이는 약 300ms 밖에 차이나지 않는다.

 

이분 탐색으로 하면 시간이 훨씬 빨라질 것 같아 나중에 도전해봐야겠다.

'백준 문제풀이' 카테고리의 다른 글

[백준] 4673번  (0) 2024.04.12
[백준] 1021번  (0) 2024.04.09
[백준] 2775번  (0) 2024.03.31
[백준] 1152번  (0) 2024.03.30
[백준] 1037번 풀이  (0) 2024.03.17