์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]์นด์นด์˜ค 2019 ์ธํ„ด - ํฌ๋ ˆ์ธ ์ธํ˜•๋ฝ‘๊ธฐ ๊ฒŒ์ž„ ์ž๋ฐ”ํ’€์ด

mmin.h 2021. 1. 10. 20:53

https://programmers.co.kr/learn/courses/30/lessons/64061

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ํฌ๋ ˆ์ธ ์ธํ˜•๋ฝ‘๊ธฐ ๊ฒŒ์ž„

[[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]] [1,5,3,5,1,2,1,4] 4

programmers.co.kr

ํฌ๋ ˆ์ธ ์ธํ˜•๋ฝ‘๊ธฐ ๊ฒŒ์ž„

๋ฌธ์ œ ์„ค๋ช…

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

๊ฒŒ์ž„ ํ™”๋ฉด์€ 1 x 1 ํฌ๊ธฐ์˜ ์นธ๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ N x N ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐ ๊ฒฉ์ž์ด๋ฉฐ ์œ„์ชฝ์—๋Š” ํฌ๋ ˆ์ธ์ด ์žˆ๊ณ  ์˜ค๋ฅธ์ชฝ์—๋Š” ๋ฐ”๊ตฌ๋‹ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. (์œ„ ๊ทธ๋ฆผ์€ 5 x 5 ํฌ๊ธฐ์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค). ๊ฐ ๊ฒฉ์ž ์นธ์—๋Š” ๋‹ค์–‘ํ•œ ์ธํ˜•์ด ๋“ค์–ด ์žˆ์œผ๋ฉฐ ์ธํ˜•์ด ์—†๋Š” ์นธ์€ ๋นˆ์นธ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์ธํ˜•์€ 1 x 1 ํฌ๊ธฐ์˜ ๊ฒฉ์ž ํ•œ ์นธ์„ ์ฐจ์ง€ํ•˜๋ฉฐ ๊ฒฉ์ž์˜ ๊ฐ€์žฅ ์•„๋ž˜ ์นธ๋ถ€ํ„ฐ ์ฐจ๊ณก์ฐจ๊ณก ์Œ“์—ฌ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒŒ์ž„ ์‚ฌ์šฉ์ž๋Š” ํฌ๋ ˆ์ธ์„ ์ขŒ์šฐ๋กœ ์›€์ง์—ฌ์„œ ๋ฉˆ์ถ˜ ์œ„์น˜์—์„œ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ์ธํ˜•์„ ์ง‘์–ด ์˜ฌ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง‘์–ด ์˜ฌ๋ฆฐ ์ธํ˜•์€ ๋ฐ”๊ตฌ๋‹ˆ์— ์Œ“์ด๊ฒŒ ๋˜๋Š” ๋ฐ, ์ด๋•Œ ๋ฐ”๊ตฌ๋‹ˆ์˜ ๊ฐ€์žฅ ์•„๋ž˜ ์นธ๋ถ€ํ„ฐ ์ธํ˜•์ด ์ˆœ์„œ๋Œ€๋กœ ์Œ“์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๊ทธ๋ฆผ์€ [1๋ฒˆ, 5๋ฒˆ, 3๋ฒˆ] ์œ„์น˜์—์„œ ์ˆœ์„œ๋Œ€๋กœ ์ธํ˜•์„ ์ง‘์–ด ์˜ฌ๋ ค ๋ฐ”๊ตฌ๋‹ˆ์— ๋‹ด์€ ๋ชจ์Šต์ž…๋‹ˆ๋‹ค.

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

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

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

 

import java.util.*;
class Solution {
    public int solution(int[][] board, int[] moves) {
            int answer = 0;

    Stack<Integer> stack = new Stack<>();
    stack.push(0);

    for (int move : moves) {
      for (int j = 0; j < board.length; j++) {
        if (board[j][move - 1] != 0) {
          if (stack.peek() == board[j][move - 1]) {
            stack.pop();
            answer += 2;
          } else {
           stack.push(board[j][move - 1]);
          }
          board[j][move - 1] = 0;
          break;
        }
      }
    }
    return answer;
    }
}

๋ฌธ์ œ ํ•ด์„ค

์ธํ˜•์„ ๋‹ด์„ stack ํ•˜๋‚˜๋ฅผ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

peek ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ์ธํ˜•์„ ํ™•์ธํ•ด์ค˜์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— Exception์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก 0์„ ์ฑ„์›Œ์ค๋‹ˆ๋‹ค.

moves์˜ ๊ธธ์ด๋งŒํผ for ๋ฌธ์„, board์˜ ๊ธธ์ด๋งŒํผ for ๋ฌธ์„ ๋Œ๋ ค์ค๋‹ˆ๋‹ค.

๋งŒ์•ฝ board ๋‚ด์˜ ๊ฐ’์ด 0์ด ์•„๋‹๋•Œ์—๋งŒ ๊ณ„์† ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ peek() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ stack ์ƒ๋‹จ์˜ ์ธํ˜•๊ณผ ๋„ฃ์„๋ ค๋Š” ์ธํ˜•์ด ๊ฐ™๋‹ค๋ฉด popํ•ด์ฃผ์–ด ์ธํ˜•์„ ์—†์• ๊ณ , ์ธํ˜•์€ 2๊ฐœ๊ฐ€ ์‚ฌ๋ผ์กŒ์œผ๋‹ˆ answer์— 2๋ฅผ ๋”ํ•ด์ค๋‹ˆ๋‹ค.

stack ์ƒ๋‹จ์˜ ์ธํ˜•๊ณผ ๋„ฃ์œผ๋ ค๋Š” ์ธํ˜•์ด ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด ๊ทธ๋Œ€๋กœ stack์— ๋„ฃ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊ทธ ํ›„ board ์— ๋ฝ‘์€ ์ธํ˜•์˜ ์ž๋ฆฌ๋ฅผ 0์œผ๋กœ ๋นˆ์ž๋ฆฌ๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ณ  break๋ฅผ ํ•˜์—ฌ moves ์—์„œ ๋‹ค์Œ ์ธํ˜•์„ ๋ฝ‘์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ ํ›„๊ธฐ

๊ธฐ์กด์— ํ•œ๋ฒˆ ํ’€์–ด์„œ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์„ ์•Œ์•˜์Œ์—๋„ index ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„ ๋‹ค๊ฑฐ๋‚˜, 2์ฐจ์› ๋ฐฐ์—ด์˜ ์ˆœ์„œ๋ฅผ ํ—ท๊ฐˆ๋ฆฌ๊ธฐ, wrapper ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ•์‹ฑ ํ•˜๋ฉด์„œ null๊ฐ’๊ณผ int ๊ฐ’ ๋น„๊ตํ• ๋ ค๊ณ  ๋ป˜์ง“ํ•˜๊ธฐ, ์ธํ˜•์ด ๋‘๊ฐœ๊ฐ€ ์‚ฌ๋ผ์ง€๋Š”๋ฐ answer๋Š” 1๋งŒ ๋”ํ•˜๊ธฐ, board ์˜ ์ธํ˜• ๋ฝ‘์€ ์ž๋ฆฌ๋ฅผ 0์œผ๋กœ ์•ˆ๋งŒ๋“ค์–ด์ฃผ๊ณ  for๋ฌธ ๊ณ„์† ๋Œ๋ ค์„œ ์‹œ๊ฐ„ ๋‚ญ๋น„ํ•˜๊ธฐ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ป˜์ง“์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ฌธ์ œ๋Š” ์ด๋Ÿฐ ๋ป˜์ง“์„ ์•ˆํ•˜๊ธฐ๋กœ ใ…Žใ…Ž;