์„ค๋ช…

๊ฒŒ์ž„๊ฐœ๋ฐœ์ž์ธ ์ฃ ๋ฅด๋””๋Š” ํฌ๋ ˆ์ธ ์ธํ˜•๋ฝ‘๊ธฐ ๊ธฐ๊ณ„๋ฅผ ๋ชจ๋ฐ”์ผ ๊ฒŒ์ž„์œผ๋กœ ๋งŒ๋“ค๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ฃ ๋ฅด๋””๋Š” ๊ฒŒ์ž„์˜ ์žฌ๋ฏธ๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด ํ™”๋ฉด ๊ตฌ์„ฑ๊ณผ ๊ทœ์น™์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฒŒ์ž„ ๋กœ์ง์— ๋ฐ˜์˜ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๊ฒŒ์ž„ ํ™”๋ฉด์€ 1 x 1 ํฌ๊ธฐ์˜ ์นธ๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ N x N ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐ ๊ฒฉ์ž์ด๋ฉฐ ์œ„์ชฝ์—๋Š” ํฌ๋ ˆ์ธ์ด ์žˆ๊ณ  ์˜ค๋ฅธ์ชฝ์—๋Š” ๋ฐ”๊ตฌ๋‹ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

(์œ„ ๊ทธ๋ฆผ์€ 5 x 5 ํฌ๊ธฐ์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค). ๊ฐ ๊ฒฉ์ž ์นธ์—๋Š” ๋‹ค์–‘ํ•œ ์ธํ˜•์ด ๋“ค์–ด ์žˆ์œผ๋ฉฐ ์ธํ˜•์ด ์—†๋Š” ์นธ์€ ๋นˆ์นธ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  ์ธํ˜•์€ 1 x 1 ํฌ๊ธฐ์˜ ๊ฒฉ์ž ํ•œ ์นธ์„ ์ฐจ์ง€ํ•˜๋ฉฐ ๊ฒฉ์ž์˜ ๊ฐ€์žฅ ์•„๋ž˜ ์นธ๋ถ€ํ„ฐ ์ฐจ๊ณก์ฐจ๊ณก ์Œ“์—ฌ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒŒ์ž„ ์‚ฌ์šฉ์ž๋Š” ํฌ๋ ˆ์ธ์„ ์ขŒ์šฐ๋กœ ์›€์ง์—ฌ์„œ ๋ฉˆ์ถ˜ ์œ„์น˜์—์„œ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ์ธํ˜•์„ ์ง‘์–ด ์˜ฌ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง‘์–ด ์˜ฌ๋ฆฐ ์ธํ˜•์€ ๋ฐ”๊ตฌ๋‹ˆ์— ์Œ“์ด๊ฒŒ ๋˜๋Š” ๋ฐ,

์ด๋•Œ ๋ฐ”๊ตฌ๋‹ˆ์˜ ๊ฐ€์žฅ ์•„๋ž˜ ์นธ๋ถ€ํ„ฐ ์ธํ˜•์ด ์ˆœ์„œ๋Œ€๋กœ ์Œ“์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๊ทธ๋ฆผ์€ [1๋ฒˆ, 5๋ฒˆ, 3๋ฒˆ] ์œ„์น˜์—์„œ ์ˆœ์„œ๋Œ€๋กœ ์ธํ˜•์„ ์ง‘์–ด ์˜ฌ๋ ค ๋ฐ”๊ตฌ๋‹ˆ์— ๋‹ด์€ ๋ชจ์Šต์ž…๋‹ˆ๋‹ค.

๋งŒ์•ฝ ๊ฐ™์€ ๋ชจ์–‘์˜ ์ธํ˜• ๋‘ ๊ฐœ๊ฐ€ ๋ฐ”๊ตฌ๋‹ˆ์— ์—ฐ์†ํ•ด์„œ ์Œ“์ด๊ฒŒ ๋˜๋ฉด ๋‘ ์ธํ˜•์€ ํ„ฐ๋œจ๋ ค์ง€๋ฉด์„œ ๋ฐ”๊ตฌ๋‹ˆ์—์„œ ์‚ฌ๋ผ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์œ„ ์ƒํƒœ์—์„œ ์ด์–ด์„œ [5๋ฒˆ] ์œ„์น˜์—์„œ ์ธํ˜•์„ ์ง‘์–ด ๋ฐ”๊ตฌ๋‹ˆ์— ์Œ“์œผ๋ฉด ๊ฐ™์€ ๋ชจ์–‘ ์ธํ˜• ๋‘ ๊ฐœ๊ฐ€ ์—†์–ด์ง‘๋‹ˆ๋‹ค.

ํฌ๋ ˆ์ธ ์ž‘๋™ ์‹œ ์ธํ˜•์ด ์ง‘์–ด์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋Š” ์—†์œผ๋‚˜ ๋งŒ์•ฝ ์ธํ˜•์ด ์—†๋Š” ๊ณณ์—์„œ ํฌ๋ ˆ์ธ์„ ์ž‘๋™์‹œํ‚ค๋Š” ๊ฒฝ์šฐ์—๋Š” ์•„๋ฌด๋Ÿฐ ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ฐ”๊ตฌ๋‹ˆ๋Š” ๋ชจ๋“  ์ธํ˜•์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์„ ๋งŒํผ ์ถฉ๋ถ„ํžˆ ํฌ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. (๊ทธ๋ฆผ์—์„œ๋Š” ํ™”๋ฉดํ‘œ์‹œ ์ œ์•ฝ์œผ๋กœ 5์นธ๋งŒ์œผ๋กœ ํ‘œํ˜„ํ•˜์˜€์Œ)

๊ฒŒ์ž„ ํ™”๋ฉด์˜ ๊ฒฉ์ž์˜ ์ƒํƒœ๊ฐ€ ๋‹ด๊ธด 2์ฐจ์› ๋ฐฐ์—ด board์™€ ์ธํ˜•์„ ์ง‘๊ธฐ ์œ„ํ•ด ํฌ๋ ˆ์ธ์„ ์ž‘๋™์‹œํ‚จ ์œ„์น˜๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด moves๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ,

ํฌ๋ ˆ์ธ์„ ๋ชจ๋‘ ์ž‘๋™์‹œํ‚จ ํ›„ ํ„ฐํŠธ๋ ค์ ธ ์‚ฌ๋ผ์ง„ ์ธํ˜•์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์„ธ์š”.

 

์ž…๋ ฅ

์ฒซ ์ค„์— ์ž์—ฐ์ˆ˜ N(5<=N<=30)์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ N*N board ๋ฐฐ์—ด์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

board์˜ ๊ฐ ์นธ์—๋Š” 0 ์ด์ƒ 100 ์ดํ•˜์ธ ์ •์ˆ˜๊ฐ€ ๋‹ด๊ฒจ์žˆ์Šต๋‹ˆ๋‹ค.

0์€ ๋นˆ ์นธ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

1 ~ 100์˜ ๊ฐ ์ˆซ์ž๋Š” ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์ธํ˜•์˜ ๋ชจ์–‘์„ ์˜๋ฏธํ•˜๋ฉฐ ๊ฐ™์€ ์ˆซ์ž๋Š” ๊ฐ™์€ ๋ชจ์–‘์˜ ์ธํ˜•์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

board๋ฐฐ์—ด์ด ๋๋‚œ ๋‹ค์Œ์ค„์— moves ๋ฐฐ์—ด์˜ ๊ธธ์ด M์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ ์ค„์—๋Š” moves ๋ฐฐ์—ด์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

moves ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” 1 ์ด์ƒ 1,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.

moves ๋ฐฐ์—ด ๊ฐ ์›์†Œ๋“ค์˜ ๊ฐ’์€ 1 ์ด์ƒ์ด๋ฉฐ board ๋ฐฐ์—ด์˜ ๊ฐ€๋กœ ํฌ๊ธฐ ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

 

์ถœ๋ ฅ

์ฒซ ์ค„์— ํ„ฐํŠธ๋ ค์ ธ ์‚ฌ๋ผ์ง„ ์ธํ˜•์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ ์ž…๋ ฅ 1 

5
0 0 0 0 0
0 0 1 0 3
0 2 5 0 1
4 2 4 4 2
3 5 1 3 1
8
1 5 3 5 1 2 1 4

์˜ˆ์‹œ ์ถœ๋ ฅ 1

4

ํ’€์ด

package Inflearn;

import java.util.Scanner;
import java.util.Stack;

public class n38_ํฌ๋ ˆ์ธ์ธํ˜•๋ฝ‘๊ธฐ {
    public static int solution(int n, int[][] board, int m, int[] moves) {
        int ans = 0;
        Stack<Integer> stack = new Stack<>();
        for (int move : moves) {
            // ์œ„์—์„œ๋ถ€ํ„ฐ ์ธํ˜•์ด ์กด์žฌํ•˜๋Š”์ง€ ์ˆœํšŒ
            for (int i = 1; i <= n; i++) {
                // ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ
                if(board[i][move] != 0) {
                    // ๋ฐ”๊ตฌ๋‹ˆ์— ๊ฐ™์€ ๋ชจ์–‘์˜ ์ธํ˜•์ด ์—ฐ์†์œผ๋กœ ์Œ“์ธ ๊ฒฝ์šฐ
                    if (!stack.isEmpty() && (stack.peek() == board[i][move])) {
                        ans++;
                        stack.pop();
                    }
                    // ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ฐ”๊ตฌ๋‹ˆ์— push
                    else {
                        stack.push(board[i][move]);
                    }
                    board[i][move] = 0;
                    break;
                }
            }
        }
        return ans*2;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[][] board = new int[n + 1][n + 1];
        for(int i=1; i<=n; i++) {
            for(int j=1; j<=n; j++) {
                board[i][j] = sc.nextInt();
            }
        }
        int m = sc.nextInt();
        int[] moves = new int[m];
        for(int i=0; i<m; i++)
            moves[i] = sc.nextInt();
        System.out.println(solution(n, board, m , moves));
    }
}

 

๋ฐ”๊ตฌ๋‹ˆ ์—ญํ• ์„ ํ•  stack์„ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ  moves ๋ฐฐ์—ด์— ์ €์žฅ๋œ ๊ฐ’๋“ค์„ for๋ฌธ์„ ํ†ตํ•ด ์ˆœํšŒํ•˜๋ฉด์„œ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

board ๋ฐฐ์—ด์˜ ์—ด์ด moves ๋ฐฐ์—ด์˜ ๊ฐ’์œผ๋กœ ๊ณ ์ •๋˜๊ณ , ์œ„์—์„œ๋ถ€ํ„ฐ ์ธํ˜•์„ ๋ฝ‘๋Š” ๊ฒƒ์ด๋ฏ€๋กœ

for๋ฌธ์„ ํ†ตํ•ด i๋ฅผ 1๋ถ€ํ„ฐ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด์„œ borad[i][move]๊ฐ€ 0์ด ์•„๋‹Œ ์ˆœ๊ฐ„์„ ์ฐพ๋Š”๋‹ค. ๊ทธ๋Ÿผ ์ธํ˜•์ด ์กด์žฌํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๊ณ 

์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐ”๊ตฌ๋‹ˆ์— ์—ฐ์†์œผ๋กœ ๊ฐ™์€ ์ธํ˜•์ด ์Œ“์ด๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•˜์—ฌ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๊ฐ™์€ ์ธํ˜•์ด ์Œ“์ธ ๊ฒฝ์šฐ ans++๋ฅผ ํ•ด์ฃผ๊ณ 

์ตœ์ข…์ ์œผ๋กœ ํ•œ ๋ฒˆ์— 2๊ฐœ์˜ ์ธํ˜•์ด ์‚ฌ๋ผ์ง€๋ฏ€๋กœ ans * 2๋ฅผ ์ถœ๋ ฅํ•ด์ค€๋‹ค.

BELATED ARTICLES

more