Home [BaekJoon] 1920 ์ˆ˜ ์ฐพ๊ธฐ JAVA
Post
Cancel

[BaekJoon] 1920 ์ˆ˜ ์ฐพ๊ธฐ JAVA

๐Ÿ”— ๋ฐฑ์ค€ 1920 ๋ฌธ์ œ https://www.acmicpc.net/problem/1920

๋ฌธ์ œ

N๊ฐœ์˜ ์ •์ˆ˜ A[1], A[2], โ€ฆ, A[N]์ด ์ฃผ์–ด์ ธ ์žˆ์„ ๋•Œ, ์ด ์•ˆ์— X๋ผ๋Š” ์ •์ˆ˜๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ์•Œ์•„๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.


์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ž์—ฐ์ˆ˜ N(1 โ‰ค N โ‰ค 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ ์ค„์—๋Š” N๊ฐœ์˜ ์ •์ˆ˜ A[1], A[2], โ€ฆ, A[N]์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ ์ค„์—๋Š” M(1 โ‰ค M โ‰ค 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ ์ค„์—๋Š” M๊ฐœ์˜ ์ˆ˜๋“ค์ด ์ฃผ์–ด์ง€๋Š”๋ฐ, ์ด ์ˆ˜๋“ค์ด A์•ˆ์— ์กด์žฌํ•˜๋Š”์ง€ ์•Œ์•„๋‚ด๋ฉด ๋œ๋‹ค. ๋ชจ๋“  ์ •์ˆ˜์˜ ๋ฒ”์œ„๋Š” -231 ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ  231๋ณด๋‹ค ์ž‘๋‹ค.


์ถœ๋ ฅ

M๊ฐœ์˜ ์ค„์— ๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค. ์กด์žฌํ•˜๋ฉด 1์„, ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด 0์„ ์ถœ๋ ฅํ•œ๋‹ค.


ํ’€์ด 1

๋ฌธ์ œ๋ฅผ ๋ดค์„๋•Œ ์ดํ•ดํ•˜๋Š”๋ฐ์— ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ์ง€๋งŒ ์ดํ•ดํ•˜๊ณ  ๋‚˜๋‹ˆ ๊ต‰์žฅํžˆ ์‰ฝ๊ฒŒ ๋Š๊ปด์กŒ๋‹ค.

๋‚ด๊ฐ€ ์ดํ•ดํ•œ ๋ฌธ์ œ๋Š” ์ด๋ ‡๋‹ค.

  1. N๊ฐœ์˜ ์ •์ˆ˜ ์ค‘ M๊ฐœ์˜ ์ •์ˆ˜๊ฐ€ ํฌํ•จ๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

  2. M๊ฐœ์˜ ๊ฐ ์ •์ˆ˜๊ฐ€ ํฌํ•จ๋˜๋ฉด 1, ํฌํ•จ๋˜์ง€ ์•Š์œผ๋ฉด 0์„ ์ถœ๋ ฅ์‹œํ‚จ๋‹ค.

ํฌํ•จ๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค๋Š” ๋ถ€๋ถ„์—์„œ contains() ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ข‹๊ฒ ๋‹ค๊ณ  ๋– ์˜ฌ๋ ธ๊ณ  ๊ทธ๋ฅผ ํ† ๋Œ€๋กœ ์ฝ”๋“œ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜์˜€์ง€๋งŒ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

๋ฌธ์ œ๋ฅผ ์ƒ์„ธํžˆ ๋ณด๋‹ˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„๋ฅ˜์— ์ด์ง„ ํƒ์ƒ‰์ด ์žˆ๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ œํ•œ ์‹œ๊ฐ„์ด 1์ดˆ์ธ ๊ฒƒ๋„ ๋’ค๋Šฆ๊ฒŒ ๋ฐœ๊ฒฌํ–ˆ๋‹ค..

์‹œ๊ฐ„ ์ดˆ๊ณผ ์ฝ”๋“œ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.io.*;
import java.util.*;

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

        int n = Integer.parseInt(br.readLine());
        List<String> nList = new ArrayList<>();
        StringTokenizer st = new StringTokenizer(br.readLine());

        while (n-- > 0) {
            nList.add(st.nextToken());
        }

        int m = Integer.parseInt(br.readLine());
        st = new StringTokenizer(br.readLine());

        while (m-- > 0) {
            System.out.println(nList.contains(st.nextToken()) ? 1 : 0);
        }
    }
}

ํ’€์ด 2

์‹œ๊ฐ„ ์ œํ•œ๊ณผ ์ด์ง„ ํƒ์ƒ‰์„ ํ™•์ธํ•˜๊ณ  java.util.Collections ํด๋ž˜์Šค์— Collections.binarySearch() ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์—ˆ๊ณ  ์ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ฝ”๋“œ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

ํ†ต๊ณผ๋Š” ํ•˜์˜€์ง€๋งŒ ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ๊ธธ๊ฒŒ ๋‚˜์™€ ๊ณ ๋ฏผํ•˜๋‹ค ๋ณด๋‹ˆ StringBuilder๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฌธ์ž์—ด๋กœ ํ•ฉ์ณ์ค€ ๋’ค์— ์ถœ๋ ฅ์„ ์‹œ์ผœ์ฃผ๋‹ˆ 1704ms โ†’ 776ms ๋กœ ํ™• ์ค„์—ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Collections.binarySearch()๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์ง€ ์•Š๋‹ค๋Š” ๊ธ€์„ ๋ณธ๊ฒƒ๊ฐ™์•„ ์ง์ ‘ ์ด์ง„ํƒ์ƒ‰์„ ๊ตฌํ˜„ํ•˜์—ฌ ๋กœ์ง๋„ ๊ตฌํ˜„ํ•ด๋ณด์•˜๋‹ค.

ArrayList 1
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
import java.io.*;
import java.util.*;

// list + Collections.binarySearch
// ๋ฉ”๋ชจ๋ฆฌ : 52960KB, ์‹œ๊ฐ„ : 1704ms

// list + Collections.binarySearch + StringBuilder
// ๋ฉ”๋ชจ๋ฆฌ : 45168KB, ์‹œ๊ฐ„ : 776ms
public class Main {
    public static void main(String[] args) throws IOException {
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int n = Integer.parseInt(br.readLine());
        List<String> nList = new ArrayList<>();
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        while (n-- > 0) nList.add(st.nextToken());
        Collections.sort(nList);

        int m = Integer.parseInt(br.readLine());
        st = new StringTokenizer(br.readLine(), " ");

        while (m-- > 0) {
            sb.append(Collections.binarySearch(nList, st.nextToken()) >= 0 ? 1 : 0).append("\n");
        }
        System.out.print(sb);
    }
}
ArrayList 2
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
import java.io.*;
import java.util.*;

// list + binarySearch
// ๋ฉ”๋ชจ๋ฆฌ : 54424KB, ์‹œ๊ฐ„ : 1336ms

// list + binarySearch + StringBuilder
// ๋ฉ”๋ชจ๋ฆฌ : 46912KB, ์‹œ๊ฐ„ : 760ms
public class Main {
    public static void main(String[] args) throws IOException {
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int n = Integer.parseInt(br.readLine());
        List<Integer> nList = new ArrayList<>();
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        while (n-- > 0) nList.add(Integer.parseInt(st.nextToken()));
        Collections.sort(nList);

        int m = Integer.parseInt(br.readLine());
        st = new StringTokenizer(br.readLine(), " ");

        while (m-- > 0) {
            sb.append(binarySearch(nList, Integer.parseInt(st.nextToken())) >= 0 ? 1 : 0).append("\n");
        }
        System.out.print(sb);
    }

    private static int binarySearch(List<Integer> nList, int key) {
        int low = 0;
        int high = nList.size() - 1;

        while (low <= high) {
            int mid = (low + high) / 2;

            if (key < nList.get(mid)) high = --mid;
            else if (key > nList.get(mid)) low = ++mid;
            else return mid;
        }
        return -1;
    }
}

ํ’€์ด 3

์‹œ๊ฐ„์„ ๋” ์ค„์—ฌ๋ณด๊ณ  ์‹ถ์€ ๋งˆ์Œ๊ณผ Array์™€ List์˜ ์‹œ๊ฐ„ ์ฐจ์ด๋ฅผ ๋น„๊ตํ•ด๋ณด๊ณ ์‹ถ์–ด์กŒ๊ณ  Array๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋กœ์ง์„ ๊ตฌํ˜„ํ•ด๋ณด์•˜๋‹ค.

ํ’€์ด 2 ์™€ ๊ฑฐ์˜ ๋น„์Šทํ•˜๋‹ค.

Array 1
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
import java.io.*;
import java.util.*;

// Array + Arrays.binarySearch
// ๋ฉ”๋ชจ๋ฆฌ : 52652KB, ์‹œ๊ฐ„ : 1380ms

// Array + Arrays.binarySearch + StringBuilder
// ๋ฉ”๋ชจ๋ฆฌ : 45660KB, ์‹œ๊ฐ„ : 604ms
public class Main {
    public static void main(String[] args) throws IOException {
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int n = Integer.parseInt(br.readLine());
        int[] nArr = new int[n];
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        for (int i = 0; i < n; i++) nArr[i] = Integer.parseInt(st.nextToken());
        Arrays.sort(nArr);

        int m = Integer.parseInt(br.readLine());
        st = new StringTokenizer(br.readLine(), " ");

        while (m-- > 0) {
            sb.append(Arrays.binarySearch(nArr,Integer.parseInt(st.nextToken()))>=0?1:0).append("\n");
        }
        System.out.print(sb);
    }
}
Array 2
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
import java.io.*;
import java.util.*;

// Array + binarySearch
// ๋ฉ”๋ชจ๋ฆฌ : 54776KB, ์‹œ๊ฐ„ : 1228ms

// Array + binarySearch + StringBuilder
// ๋ฉ”๋ชจ๋ฆฌ : 44864KB, ์‹œ๊ฐ„ : 612ms
public class Main {
    public static void main(String[] args) throws IOException {
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int n = Integer.parseInt(br.readLine());
        int[] nArr = new int[n];
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        for (int i = 0; i < n; i++) nArr[i] = Integer.parseInt(st.nextToken());
        Arrays.sort(nArr);

        int m = Integer.parseInt(br.readLine());
        st = new StringTokenizer(br.readLine(), " ");

        while (m-- > 0) {
            sb.append(binarySearch(nArr, Integer.parseInt(st.nextToken())) >= 0 ? 1 : 0).append("\n");
        }
        System.out.print(sb);
    }

    private static int binarySearch(int[] nArr, int key) {
        int low = 0;
        int high = nArr.length - 1;

        while (low <= high) {
            int mid = (low + high) / 2;

            if (key < nArr[mid]) high = --mid;
            else if (key > nArr[mid]) low = ++mid;
            else return mid;
        }
        return -1;
    }
}

ํ’€์ด 3

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„๋ฅ˜ ๋ถ€๋ถ„์— ์ด์ง„ํƒ์ƒ‰ ๋ง๊ณ ๋„ ์ž๋ฃŒ๊ตฌ์กฐ ๊ฐ€ ์ ํ˜€์žˆ์—ˆ๊ณ  ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด์„œ๋„ ์‹œ๊ฐ„์ œํ•œ ์•ˆ์— ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•œ์ง€ ๊ถ๊ธˆํ•ด์ ธ ๊ณ ๋ฏผ์„ ํ•ด ๋ณด๋‹ˆ HashSet์„ ํ™œ์šฉํ•˜๋ฉด ์ ํ•ฉํ• ๊ฑฐ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

HashSet์€ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•จ๊ณผ ๋™์‹œ์— ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— contains() ๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ๋น„๊ตํ•˜๊ฒŒ ๋˜๋ฉด list, array๋ณด๋‹ค ์›”๋“ฑํžˆ ๋น ๋ฅธ ์†๋„๋กœ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

HashSet 1
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
import java.io.*;
import java.util.*;

// HashSet + StringBuilder
// ๋ฉ”๋ชจ๋ฆฌ : 44952KB, ์‹œ๊ฐ„ : 564ms
public class Main {
    public static void main(String[] args) throws IOException {
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int n = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine());

        HashSet<String> hashSet = new HashSet<>(); // ์ค‘๋ณต์ œ๊ฑฐ

        while (n-- > 0) hashSet.add(st.nextToken());

        int m = Integer.parseInt(br.readLine());
        st = new StringTokenizer(br.readLine());

        while (m-- > 0) sb.append(hashSet.contains(st.nextToken()) ? "1\n" : "0\n");

        System.out.println(sb);
    }
}
HashSet 1.5
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
import java.io.*;
import java.util.*;

// HashSet + StringBuilder
// ๋ฉ”๋ชจ๋ฆฌ : 44952KB, ์‹œ๊ฐ„ : 564ms
public class Main {
    public static void main(String[] args) throws IOException {
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        br.readLine();

        String[] temp = br.readLine().split(" ");

        HashSet<String> hashSet = new HashSet<>(Arrays.asList(temp)); // ์ค‘๋ณต์ œ๊ฑฐ

        br.readLine();

        temp = br.readLine().split(" ");

        for (String s : temp) sb.append(hashSet.contains(s) ? "1\n" : "0\n");

        System.out.println(sb);
    }
}
This post is licensed under CC BY 4.0 by the author.

[BaekJoon] 1436 ์˜ํ™”๊ฐ๋… ์ˆŒ JAVA

[BaekJoon] 11050 ์ดํ•ญ ๊ณ„์ˆ˜ 1 JAVA