최대 1 분 소요

[백준 1764번] 듣보잡

str.compareTp(str) 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package _2월_1주차;
 
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;
public class 백준_손수경_정답_1764 {
 
    public static void main(String[] args) throws IOException {
        
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());
        String[] nName = new String[n];
        String[] mName = new String[m];
        int cnt = 0;
        ArrayList<String> result = new ArrayList<String> ();
        
        for (int i = 0; i < n; i++) {
            nName[i] = br.readLine();
        }
        for (int i = 0; i < m; i++) {
            mName[i] = br.readLine();
        }
        
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (nName[i].compareTo(mName[j]) == 0) {
                    result.add(nName[i]);
                    cnt++;    
                }
            }
        }
        
        Collections.sort(result);
 
        System.out.println(cnt);
        for (String i : result) {
            System.out.println(i);
        }
        bw.close();
    }
 
}
 
cs

시간 초과,,,,망할

HashSet으로 데이터형 바꿈 + .contains 매서드 사용

앞 문제에서도 마찬가지로 비교를 이용한다면 HashSet이 빠르다. 그리고 두 배열을 비교하기 위해서는 자바는 굳이 2중배열을 돌리면서 하나씩 비교하지 않아도 된다. 왜냐하면 .contains 매서드가 있기 때문이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package _2월_1주차;
 
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.StringTokenizer;
public class 백준_손수경_정답_1764 {
 
    public static void main(String[] args) throws IOException {
        
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());
        HashSet<String> nName = new HashSet();
        HashSet<String> mName = new HashSet();
        ArrayList<String> result = new ArrayList<String> ();
        int cnt = 0;
        
        
        for (int i = 0; i < n; i++) {
            nName.add(br.readLine());
        }
        for (int i = 0; i < m; i++) {
            mName.add(br.readLine());
        }
        
        for (String i : nName) {
            boolean isSame = mName.contains(i);
            if (isSame == true) {
                cnt++;
                result.add(i);
            }
        }
        
        Collections.sort(result);
 
        System.out.println(cnt);
        for (String i : result) {
            System.out.println(i);
        }
        bw.close();
    }
 
}
 
cs


배운 점

  1. 2개 이상의 배열을 비교하려면 .contains를 사용할 것
  2. 비교를 할 일이 있다면 HashSet을 사용할 것

댓글남기기