๊ธฐ๋ก๋ฐฉ

BOJ_17281 : โšพ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_17281 : โšพ

Soom_1n 2023. 2. 20. 22:02

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

17281๋ฒˆ: โšพ

โšพ๋Š” 9๋ช…์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋‘ ํŒ€์ด ๊ณต๊ฒฉ๊ณผ ์ˆ˜๋น„๋ฅผ ๋ฒˆ๊ฐˆ์•„ ํ•˜๋Š” ๊ฒŒ์ž„์ด๋‹ค. ํ•˜๋‚˜์˜ ์ด๋‹์€ ๊ณต๊ฒฉ๊ณผ ์ˆ˜๋น„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ์ด N์ด๋‹ ๋™์•ˆ ๊ฒŒ์ž„์„ ์ง„ํ–‰ํ•ด์•ผ ํ•œ๋‹ค. ํ•œ ์ด๋‹์— 3์•„์›ƒ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ด๋‹์ด ์ข…

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • n๊ฐœ์˜ ์ด๋‹ ๋ณ„ ํƒ€์ž์˜ ์„ฑ์ ์„ ์ž…๋ ฅ๋ฐ›๊ณ , ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋“์ ์„ ์ถœ๋ ฅํ•œ๋‹ค.
    • ํƒ€์ž๋Š” 9๋ช…์ด๋ฉฐ 4๋ฒˆ ํƒ€์ž๋Š” 1๋ฒˆ ์„ ์ˆ˜๋กœ ๊ณ ์ •๋˜์–ด ์žˆ๋‹ค.
    • ํ•œ ๋ฒˆ ์ •ํ•ด์ง„ ํƒ€์ˆœ์€ ๋ชจ๋“  ์ด๋‹์— ๋˜‘๊ฐ™์ด ์ ์šฉ๋œ๋‹ค.
    • ํ•œ ์ด๋‹์—์„œ ์‚ฌ์šฉํ•œ ํƒ€์ˆœ์„ ๋‹ค์Œ ์ด๋‹์—์„œ ์ด์–ด์„œ ์ ์šฉํ•œ๋‹ค.
    • 0์€ ์•„์›ƒ์ด๊ณ , 1~4๋Š” ์•ˆํƒ€, 2๋ฃจํƒ€, 3๋ฃจํƒ€, ํ™ˆ๋Ÿฐ์ด๋‹ค.
  • 4๋ฒˆ ํƒ€์ˆœ์„ ์ œ์™ธํ•˜๊ณ , 8์ž๋ฆฌ์˜ ์ˆœ์„œ๋ฅผ ๋ฝ‘๋Š” ์ˆœ์—ด์„ ๊ตฌํ•ด ํƒ€์ˆœ์„ ๋ชจ๋‘ ๋น„๊ตํ•œ๋‹ค.
  • ๊ฐ ํƒ€์ˆœ ๋ณ„ ์ ์ˆ˜ ๊ฒฐ๊ณผ๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ๊ทธ ์ค‘ ์ตœ๋Œ€๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {
    static int[][] inning_point;
    static int[] player;
    static boolean[] used;
    static int n, max;

    private static void perm(int idx) { // idx : ๊ณจ๋ผ์•ผ ํ•˜๋Š” ํƒ€์ˆœ
        if (idx == 10) {
            baseBall();
            return;
        }

        if (idx == 4) {
            perm(idx + 1); // 4๋ฒˆ์ž๋ฆฌ ์Šคํ‚ต
        } else {
            for (int i = 2; i <= 9; i++) {
                if (!used[i]) {
                    used[i] = true;
                    player[idx] = i;
                    perm(idx + 1);
                    used[i] = false;
                }
            }
        }
    }

    private static void baseBall() {
        int point = 0;
        int player_num = 1;
        for (int i = 1; i <= n; i++) {
            int out = 0;
            Queue<Integer> lu = new ArrayDeque<>();
            while (out < 3) {
                if (inning_point[i][player[player_num]] == 0) {
                    out++;
                } else {
                    int size = lu.size();
                    for (int k = 0; k < size; k++) {
                        int man = lu.poll() + inning_point[i][player[player_num]];
                        if (man > 3) {
                            point++;
                        } else {
                            lu.add(man);
                        }
                    }

                    if (inning_point[i][player[player_num]] == 4) {
                        point++;
                    } else {
                        lu.add(inning_point[i][player[player_num]]);
                    }
                }

                if (++player_num == 10) {
                    player_num = 1;
                }
            }
        }

        max = Math.max(max, point);
    }

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

        n = Integer.parseInt(br.readLine());
        player = new int[10];
        used = new boolean[10];
        player[4] = 1;
        used[1] = true;

        inning_point = new int[n + 1][10];
        for (int i = 1; i <= n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            for (int j = 1; j <= 9; j++) {
                inning_point[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        perm(1);

        System.out.println(max);
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ๊ฐ ์ด๋‹ ๋ณ„ ํƒ€์ž์˜ ์„ฑ์ ์„ 2์ฐจ์› ๋ฐฐ์—ด inning_point์— ์ €์žฅํ•œ๋‹ค.
  • perm() ๋ฉ”์„œ๋“œ์—์„œ 8์ž๋ฆฌ ํƒ€์ˆœ์— ๋Œ€ํ•œ ์ˆœ์—ด์„ ๋งŒ๋“ค์–ด ๊ณ„์‚ฐํ•œ๋‹ค.
    • ๋ฝ‘์€ ํƒ€์ˆœ์€ player ๋ฐฐ์—ด์— ์ €์žฅํ•˜๊ณ , used์˜ ํ•ด๋‹น ์ธ๋ฑ์Šค๋ฅผ true๋กœ ๋ฐ”๊พผ๋‹ค.
    • perm() ๋ฉ”์„œ๋“œ๋ฅผ ๋ถˆ๋Ÿฌ ์žฌ๊ท€ ํ˜•์‹์œผ๋กœ ์ˆœ์—ด์„ ์™„์„ฑํ•œ๋‹ค.
  • ์ˆœ์—ด์ด ์™„์„ฑ๋˜๋ฉด baseBall()๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด ์•ผ๊ตฌ ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
    • ๊ฐ ๋ฒ ์ด์Šค์˜ ์ƒํƒœ๋ฅผ ํ lu๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌํ•œ๋‹ค.
      • ํƒ€์ž๊ฐ€ ๊ณต์„ ์น˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ ๋งŒํผ ๊ธฐ์กด์˜ ์ƒํƒœ๋“ค์— ๋”ํ•ด์ค€ ๋’ค ํ˜„์žฌ ํƒ€์ž ๊ฐ’๋„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.
      • ์ตœ์†Œ 1๊ฐœ์”ฉ ๋‹น๊ธฐ๊ธฐ๋ถ€ํ„ฐ 4 ํ™ˆ๋Ÿฐ์œผ๋กœ ๋ชจ๋‘ ๋‚˜๊ฐ€๊ธฐ ๊นŒ์ง€ ์žˆ์œผ๋ฉฐ, lu๋Š” ํ•ญ์ƒ ๋‚ด๋ฆผ์ฐจ์ˆœ์ด๋‹ค.
      • ํ™ˆ์œผ๋กœ ๋‚˜๊ฐ„ ํƒ€์ž์˜ ์ˆ˜๋ฅผ ์นด์šดํŠธํ•œ๋‹ค.
      • out์ด 3๋ฒˆ๋˜๋ฉด, ํ•œ ์ด๋‹์„ ์ข…๋ฃŒํ•œ๋‹ค.
      • ๋ชจ๋“  ์ด๋‹์ด ์ข…๋ฃŒ๋˜๋ฉด ํ™ˆ์œผ๋กœ ๋„๋‹ฌ ํ•œ ํƒ€์ž์˜ ์ˆ˜์™€ max ๊ฐ’ ์ค‘ ํฐ ๊ฐ’์„ max๋กœ ์ €์žฅํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์ˆœ์—ด๊ณผ ์•ผ๊ตฌ ๊ทœ์น™์— ๋Œ€ํ•œ ๊ตฌํ˜„์ด ์„ž์ธ ๋ฌธ์ œ์˜€๋‹ค.
  • ์ฐจ๋ถ„ํžˆ ํ’€๋ฉด ๊ทธ๋ ‡๊ฒŒ๊นŒ์ง„ ์–ด๋ ต์ง€ ์•Š์•˜๋Š”๋ฐ, ์ค‘๊ฐ„์ค‘๊ฐ„ ๋Š์–ด์„œ ํ’€๋‹ค๋ณด๋‹ˆ ๋” ๋Š˜์–ด์ง„ ๊ฒƒ ๊ฐ™๋‹ค.
  • ๋ฒ ์ด์Šค ๋ณ„ ์ƒํƒœ๋ฅผ ํ๋กœ ๊ด€๋ฆฌํ–ˆ๋Š”๋ฐ, boolean์ด๋‚˜ int ๋ฐฐ์—ด๋กœ๋„ ๊ฐ€๋Šฅํ•œ ๊ฒƒ ๊ฐ™๋‹ค. ์ฝ”๋“œ๋Š” ๋งŽ์ด ๊ธธ์–ด์ง€์ง€๋งŒ ํ๋ณด๋‹ค ๋น ๋ฅด๋‹ค.

728x90