[ํ๋ก๊ทธ๋๋จธ์ค]์นด์นด์ค 2019 ์ธํด - ํฌ๋ ์ธ ์ธํ๋ฝ๊ธฐ ๊ฒ์ ์๋ฐํ์ด
https://programmers.co.kr/learn/courses/30/lessons/64061
ํฌ๋ ์ธ ์ธํ๋ฝ๊ธฐ ๊ฒ์
๋ฌธ์ ์ค๋ช
๊ฒ์๊ฐ๋ฐ์์ธ ์ฃ ๋ฅด๋๋ ํฌ๋ ์ธ ์ธํ๋ฝ๊ธฐ ๊ธฐ๊ณ๋ฅผ ๋ชจ๋ฐ์ผ ๊ฒ์์ผ๋ก ๋ง๋ค๋ ค๊ณ ํฉ๋๋ค.์ฃ ๋ฅด๋๋ ๊ฒ์์ ์ฌ๋ฏธ๋ฅผ ๋์ด๊ธฐ ์ํด ํ๋ฉด ๊ตฌ์ฑ๊ณผ ๊ท์น์ ๋ค์๊ณผ ๊ฐ์ด ๊ฒ์ ๋ก์ง์ ๋ฐ์ํ๋ ค๊ณ ํฉ๋๋ค.
๊ฒ์ ํ๋ฉด์ 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๋ฌธ ๊ณ์ ๋๋ ค์ ์๊ฐ ๋ญ๋นํ๊ธฐ ๋ฑ ๋ค์ํ ๋ป์ง์ ํ์ต๋๋ค.
๋ค์ ๋ฌธ์ ๋ ์ด๋ฐ ๋ป์ง์ ์ํ๊ธฐ๋ก ใ ใ ;