Home [BaekJoon] 2034 ๋ฐ˜์Œ JAVA
Post
Cancel

[BaekJoon] 2034 ๋ฐ˜์Œ JAVA

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

๋ฌธ์ œ

์„œ์–‘ ์Œ์•…์˜ ์Œ๊ณ„๋Š” ๋„๋ ˆ๋ฏธํŒŒ์†”๋ผ์‹œ์˜ ์น ์Œ๊ณ„์ด๋‹ค. ๊ฐ๊ฐ์˜ ์Œ์€ ์ฐจ๋ก€๋กœ ์˜์–ด ์•ŒํŒŒ๋ฒณ CDEFGAB์— ๋Œ€์‘๋œ๋‹ค(๋„๋‹ค๋ ˆ๋ผ๋ฏธ๋งˆํŒŒ๋ฐ”์†”์‚ฌ๋ผ๊ฐ€์‹œ๋‚˜๋„๋‹ค๋ฅผ ์ƒ๊ฐํ•˜๋ฉด ๋จ). ์ด ๋ฌธ์ œ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์ผ๊ณฑ ์Œ๋งŒ์„ ๋‹ค๋ฃจ๊ธฐ๋กœ ํ•œ๋‹ค.

img

ํ•˜์ง€๋งŒ ๋ชจ๋“  ์Œ์ด ์ด ์ผ๊ณฑ์œผ๋กœ๋งŒ ๊ตฌ์„ฑ๋œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ํ”ผ์•„๋…ธ์—๋Š” ์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๊ฒ€์€ ๊ฑด๋ฐ˜์ด ์žˆ์œผ๋ฉฐ, ๊ฒ€์€ ๊ฑด๋ฐ˜์€ ์ธ์ ‘ํ•œ ํฐ ๊ฑด๋ฐ˜๊ณผ ๋ฐ˜์Œ์˜ ์ฐจ์ด๊ฐ€ ๋‚œ๋‹ค. ์ฆ‰, C์™€ D ์‚ฌ์ด์— ์žˆ๋Š” ๊ฒ€์€ ๊ฑด๋ฐ˜์€ C, D์™€ ๋ฐ˜์Œ ์ฐจ์ด๊ฐ€ ๋‚œ๋‹ค. ๊ฒ€์€ ๊ฑด๋ฐ˜์ด ์‚ฌ์ด์— ์—†๋Š” ๊ฒฝ์šฐ์—๋Š”, ๋ถ™์–ด ์žˆ๋Š” ๋‘ ํฐ ๊ฑด๋ฐ˜์ด ๋ฐ˜์Œ ์ฐจ์ด๊ฐ€ ๋‚œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด B, C ๋Š” ๋ฐ˜์Œ ์ฐจ์ด๊ฐ€ ๋‚˜๋ฉฐ, E, F๋Š” ๋ฐ˜์Œ ์ฐจ์ด๊ฐ€ ๋‚œ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฐ˜์Œ ์ฐจ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ, ๋‘ ์Œ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. F๋กœ๋ถ€ํ„ฐ -1๋งŒํผ ๋–จ์–ด์ง„ (์™ผ์ชฝ์œผ๋กœ ๋ฐ˜์Œ) ์Œ์€ E์ด๊ณ , F๋กœ๋ถ€ํ„ฐ 4๋งŒํผ ๋–จ์–ด์ง„(์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ฐ˜์Œ ๋„ค ๋ฒˆ) ์Œ์€ A์ด๋‹ค. ์ด ๋ฌธ์ œ์—์„œ๋Š” ์น ์Œ(ํฐ ๊ฑด๋ฐ˜)๋งŒ์„ ๋”ฐ์ง€๋ฏ€๋กœ, F๋กœ๋ถ€ํ„ฐ 1๋งŒํผ ๋–จ์–ด์ง„ ์Œ์€ ์—†๋‹ค.

์ด๋Ÿฌํ•œ ๊ฑฐ๋ฆฌ๋“ค์„ ๋ชจ์œผ๋ฉด ํ•˜๋‚˜์˜ ์•…๋ณด๊ฐ€ ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 2 2 1 2 2 2 1๊ณผ ๊ฐ™์€ ์•…๋ณด๋Š”, ์ฐจ๋ก€๋กœ CDEFGABC๋ฅผ ๋ˆ„๋ฅด๋Š” ์•…๋ณด์ด๋‹ค. ์ฆ‰, ์ด ์•…๋ณด๋Š” ์ฒซ ์Œ์ด C์ด๊ณ  ๋ ์Œ์ด C์ธ ์•…๋ณด๊ฐ€ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ด ์•…๋ณด๋Š” ์ฒซ ์Œ์ด D์ผ ์ˆ˜๋Š” ์—†๋Š”๋ฐ, ๊ทธ ๊ฒฝ์šฐ DE ๋‹ค์Œ์— ๊ฒ€์€ ๊ฑด๋ฐ˜์ด ๋ˆŒ๋ฆฌ๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์•…๋ณด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ฐ€๋Šฅํ•œ ์ฒซ ์Œ๊ณผ ๋ ์Œ์˜ ์Œ์„ ๋ชจ๋‘ ๊ตฌํ•ด๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ํ”ผ์•„๋…ธ๋Š” ์ขŒ์šฐ๋กœ ๋ฌดํ•œํžˆ ๊ธธ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.


์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์•…๋ณด์˜ ๊ธธ์ด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ n(1 โ‰ค n โ‰ค 10,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ n๊ฐœ์˜ ์ค„์—๋Š” ์ ˆ๋Œ“๊ฐ’์ด 20์„ ๋„˜๊ธฐ์ง€ ์•Š๋Š” ์ •์ˆ˜๋กœ ์•…๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.


์ถœ๋ ฅ

์ฒซ์งธ ์ค„๋กœ๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ์ฒซ ์Œ๊ณผ ๋ ์Œ์„ ์ถœ๋ ฅํ•œ๋‹ค. ์—ฌ๋Ÿฌ ๊ฒฝ์šฐ๊ฐ€ ๊ฐ€๋Šฅํ•  ๋•Œ์—๋Š” ์•ŒํŒŒ๋ฒณ์ด ์ž‘์€ ๊ฒฝ์šฐ๋ถ€ํ„ฐ ์ถœ๋ ฅํ•œ๋‹ค,


ํ’€์ด

์ผ๋‹จ.. ๋งค์šฐ ์–ด๋ ค์šด ๋ฌธ์ œ๋กœ ๋Š๊ปด์กŒ๋‹ค.

๊ทธ๋ž˜๋„ ์ฒœ์ฒœํžˆ ํ•˜๋‚˜์”ฉ ํ’€์–ด๋ณด๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ  ์ฒ˜์Œ ํ†ต๊ณผํ•œ ์ฝ”๋“œ๋Š” ๊ทธ์•ผ๋ง๋กœ ๋‚œ์žฅํŒ..์ด์—ˆ๋‹ค.

๋จผ์ €, ์‹œ๊ฐ„ ์ œํ•œ์ด ์žˆ์œผ๋‹ˆ BufferedReader๋กœ ์ž…๋ ฅ์„ ๋ฐ›๊ธฐ๋กœ ํ–ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  scale์ด๋ผ๋Š” ๋ฆฌ์ŠคํŠธ์— ์˜์–ด ์Œ๊ณ„๋ฅผ ๋„ฃ์–ด์คฌ๋Š”๋ฐ, ๊ทธ๋ƒฅ ๋„ฃ์–ด์ฃผ์ง€ ์•Š๊ณ  ๋ฐ˜์Œ ์˜ฌ๋ ธ์„ ๋•Œ ๊ฒ€์€ ๊ฑด๋ฐ˜์ด๋ผ๋ฉด null๊ฐ’์„ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.

๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•  ๋•Œ, ์ฒซ ์Œ๊ณผ ๋ ์Œ์„ ์ถœ๋ ฅํ•ด์•ผํ•˜๊ณ , ์—ฌ๋Ÿฌ ๊ฒฝ์šฐ๊ฐ€ ๊ฐ€๋Šฅํ•  ๋•Œ ์•ŒํŒŒ๋ฒณ์ด ์ž‘์€ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์•ผํ•˜๊ธฐ์— HashMap์„ ์„ ์–ธํ•ด์ฃผ์—ˆ๋‹ค.

๊ทธ ํ›„, for๋ฌธ์„ ๋Œ๋ฆฌ๋ฉด์„œ ๊ฐ ์Œ๊ณ„๋งˆ๋‹ค ์ž…๋ ฅ๋“ค์–ด์˜จ ์•…๋ณด๋งŒํผ ์ด๋™์„ ์‹œ์ผœ์ฃผ์—ˆ๋‹ค.

๋ฆฌํŒฉํ† ๋ง ์ „

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
53
54
55
56
57
58
59
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));

        List<String> scale = Arrays.asList("C", null, "D", null, "E", "F", null, "G", null, "A", null, "B");
        Map<String, String> result = new HashMap<>();
        int n = Integer.parseInt(br.readLine());
        int[] play = new int[n];

        for (int k = 0; k < n; k++) play[k] = Integer.parseInt(br.readLine());
        for (int i = 0; i < scale.size(); i++) {

            // ์•…๋ณด๋ฅผ ๋”ฐ๋ผ ์ด๋™ํ•  ์Œ
            int sum = i; 
            
            // ์‹œ์ž‘ ์Œ์ด ๊ฒ€์€ ๊ฑด๋ฐ˜์ผ ๊ฒฝ์šฐ ๋ฐ‘ ๋กœ์ง์„ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค
            if (scale.get(i) == null) continue; 

            for (int j = 0; j < n; j++) {
            
                // sum์ด ์Œ๊ณ„ list์˜ ํฌ๊ธฐ๋ฅผ ๋ฒ—์–ด๋‚˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค
                sum = sumSize(sum + play[j], scale.size()); 

                if (sum >= scale.size()) sum = sumSize(sum, scale.size());
                else if (sum < 0) sum = sumSize(sum, scale.size());

                // ์Œ์ด ๋„์ฐฉํ•œ ์ง€์ ์ด ๊ฒ€์€ ๊ฑด๋ฐ˜์ผ ๊ฒฝ์šฐ ํ•ด๋‹น for๋ฌธ์„ ๋ฒ—์–ด๋‚œ๋‹ค
                if (scale.get(sum) == null) break; 
            }
            
            // ๋ ์Œ์ด ๊ฒ€์€ ๊ฑด๋ฐ˜์ผ ๊ฒฝ์šฐ ๋ฐ‘ ๋กœ์ง์„ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค
            if (scale.get(sum) == null) continue; 
            
            // ์ฒซ ์Œ, ๋ ์Œ์ด ๋ชจ๋‘ ํฐ ๊ฑด๋ฐ˜์ด๋ผ๋ฉด hashmap์— ๋„ฃ๋Š”๋‹ค
            result.put(scale.get(i), scale.get(sum)); 
        }

        // hashmap์˜ ์ฒซ ์Œ์„ ๊บผ๋‚ด์–ด ์ž‘์€ ์ˆœ์œผ๋กœ ์ •๋ ฌ์‹œ์ผœ์ค€๋‹ค
        Object[] mapKey = result.keySet().toArray(); 
        Arrays.sort(mapKey); 

        // ์ •๋ ฌ์‹œํ‚จ ์ฒซ ์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค
        for (Object key : mapKey) { 
            System.out.println(key + " " + result.get(String.valueOf(key)));
        }
    }

    // sum์˜ ํฌ๊ธฐ๊ฐ€ scale์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚  ๋•Œ
    public static int sumSize(int sum, int size) {

        if (sum >= size) sum -= size;
        else if (sum < 0) sum += size;

        return sum;
    }
}

์ผ๋‹จ ๋ฆฌํŒฉํ† ๋ง ์ „ ์ฝ”๋“œ๋Š” ๋”ฑ ๋ด๋„ ๋‚œ์žกํ•˜๋‹ค.

๋ฆฌํŒฉํ† ๋ง์„ ํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜์ •ํ•  ๋ถ€๋ถ„์„ ์ถ”๋ ค๋ณด์•˜๋‹ค.

  1. scale์€ ๊ตณ์ด list๋กœ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๋‹ค๋ฅธ ํƒ€์ž…์„ ์‚ฌ์šฉํ•ด๋ณด์ž.

  2. scale์„ C๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์ •๋ ฌ์ด ํ•„์š”ํ–ˆ์œผ๋‚˜ A๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค๋ฉด ๊ตณ์ด ์ •๋ ฌ์„ ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์ง„๋‹ค.

  3. null๋กœ ๊ฒ€์€ ๊ฑด๋ฐ˜์„ ํ™•์ธํ•ด์•ผํ• ๊นŒ? ์œ„์น˜๋กœ ํ™•์ธํ•  ์ˆ˜๋Š” ์—†์„๊นŒ?

  4. ์–ด์ฐจํ”ผ scale์˜ ๊ธธ์ด๋Š” 12๋กœ ๊ณ ์ •๋˜์–ด์žˆ๋Š”๋ฐ ๊ตณ์ด length?

  5. ๋ฐ˜๋ณต๋˜๋Š” ์—ฐ์‚ฐ์ด ์กด์žฌํ•˜๋Š”๋ฐ ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๋Š”๊ฑด ์–ด๋–จ๊นŒ

  6. BufferedWriter๋กœ ์‹œ๊ฐ„์„ ๋” ๋‹จ์ถ•์‹œ์ผœ๋ณด์ž

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
53
54
55
56
57
58
59
60
61
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));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        // ๋ฆฌ์ŠคํŠธ๋ฅผ String ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝํ•˜์˜€๋‹ค
        String scale = "A_BC_D_EF_G_";
        
        // ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ํฐ ๊ฑด๋ฐ˜์˜ ์œ„์น˜๋ฅผ ๋ฆฌ์ŠคํŠธ๋กœ ์„ ์–ธํ•ด๋‘์—ˆ๋‹ค
        List<Integer> pos = Arrays.asList(0, 2, 3, 5, 7, 8, 10); 

        int n = Integer.parseInt(br.readLine());
        int[] play = new int[n];

        for (int k = 0; k < n; k++) play[k] = Integer.parseInt(br.readLine());

        for (int i = 0; i < 12; i++) {

            int sum = i;
            
            // ์„ ์–ธํ•œ ์œ„์น˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์ฒซ ์Œ์ด ํฐ ๊ฑด๋ฐ˜ ์œ„์น˜๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๋‹ค์Œ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค
            if (!pos.contains(i)) continue; 

            for (int j = 0; j < n; j++) {
                sum = sumSize(sumLen(sum + play[j])); // ์žฌ๊ท€
                
                // ์„ ์–ธํ•œ ์œ„์น˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ๋งˆ์ง€๋ง‰ ์Œ์ด ํฐ ๊ฑด๋ฐ˜ ์œ„์น˜๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๋ฐ˜๋ณต๋ฌธ์„ ๋น ์ ธ๋‚˜์˜จ๋‹ค
                if (!pos.contains(sum)) break; 
            }

            // ์„ ์–ธํ•œ ์œ„์น˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ๋งˆ์ง€๋ง‰ ์Œ์ด ํฐ ๊ฑด๋ฐ˜ ์œ„์น˜๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๋‹ค์Œ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค
            if (!pos.contains(sum)) continue; 

            bw.write(scale.charAt(i) + " "
                    + scale.charAt(sum) + "\n");
        }
        bw.close();
    }

    private static int sumSize(int sum) {
        // ์žฌ๊ท€ ํƒˆ์ถœ์กฐ๊ฑด
        // ์ด๋™ํ•œ ์Œ์ด scale์˜ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด๊ฐ€์ง€ ์•Š์œผ๋ฉด ์žฌ๊ท€๋ฅผ ํƒˆ์ถœํ•œ๋‹ค
        if (sum < 12 && sum >= 0) {
            return sum;
        }

        if (sum < 0) sum = sumSize(sum + 12); 
        if (sum >= 12) sum = sumSize(sum - 12);
        return sum;
    }

    // ์žฌ๊ท€ ๋Œ์ž… ์ „, ์ฒ˜์Œ์— ํ•„์š”ํ•œ ์—ฐ์‚ฐ์„ ํ•ด ์ค€๋‹ค
    private static int sumLen(int sum) { 
        if (sum >= 12) sum -= 12;
        if (sum < 0) sum += 12;
        return sum;
    }
}
This post is licensed under CC BY 4.0 by the author.

[BaekJoon] 1542 ์„ธ์ค€์„ธ๋น„ JAVA

[BaekJoon] 1064 ํ‰ํ–‰์‚ฌ๋ณ€ํ˜• JAVA