๐ ๋ค์ด๊ฐ๋ฉฐ
์๋ฐ์คํฌ๋ฆฝํธ๋ก ์คํ(Stack) ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ฉํ์ฌ ํ๋ก๊ทธ๋๋จธ์ค 'ํฌ๋ ์ธ ์ธํ๋ฝ๊ธฐ' ์นด์นด์ค ๊ธฐ์ถ๋ฌธ์ ํ์ด๋ฅผ ํ๊ฒ ๋ค.
โ ๋ฌธ์
๋ฌธ์ ์ค๋ช
๊ฒ์๊ฐ๋ฐ์์ธ "์ฃ ๋ฅด๋"๋ ํฌ๋ ์ธ ์ธํ๋ฝ๊ธฐ ๊ธฐ๊ณ๋ฅผ ๋ชจ๋ฐ์ผ ๊ฒ์์ผ๋ก ๋ง๋ค๋ ค๊ณ ํฉ๋๋ค.
"์ฃ ๋ฅด๋"๋ ๊ฒ์์ ์ฌ๋ฏธ๋ฅผ ๋์ด๊ธฐ ์ํด ํ๋ฉด ๊ตฌ์ฑ๊ณผ ๊ท์น์ ๋ค์๊ณผ ๊ฐ์ด ๊ฒ์ ๋ก์ง์ ๋ฐ์ํ๋ ค๊ณ ํฉ๋๋ค.
๊ฒ์ ํ๋ฉด์ "1 x 1" ํฌ๊ธฐ์ ์นธ๋ค๋ก ์ด๋ฃจ์ด์ง "N x N" ํฌ๊ธฐ์ ์ ์ฌ๊ฐ ๊ฒฉ์์ด๋ฉฐ ์์ชฝ์๋ ํฌ๋ ์ธ์ด ์๊ณ ์ค๋ฅธ์ชฝ์๋ ๋ฐ๊ตฌ๋๊ฐ ์์ต๋๋ค. (์ ๊ทธ๋ฆผ์ "5 x 5" ํฌ๊ธฐ์ ์์์ ๋๋ค). ๊ฐ ๊ฒฉ์ ์นธ์๋ ๋ค์ํ ์ธํ์ด ๋ค์ด ์์ผ๋ฉฐ ์ธํ์ด ์๋ ์นธ์ ๋น์นธ์ ๋๋ค. ๋ชจ๋ ์ธํ์ "1 x 1" ํฌ๊ธฐ์ ๊ฒฉ์ ํ ์นธ์ ์ฐจ์งํ๋ฉฐ ๊ฒฉ์์ ๊ฐ์ฅ ์๋ ์นธ๋ถํฐ ์ฐจ๊ณก์ฐจ๊ณก ์์ฌ ์์ต๋๋ค. ๊ฒ์ ์ฌ์ฉ์๋ ํฌ๋ ์ธ์ ์ข์ฐ๋ก ์์ง์ฌ์ ๋ฉ์ถ ์์น์์ ๊ฐ์ฅ ์์ ์๋ ์ธํ์ ์ง์ด ์ฌ๋ฆด ์ ์์ต๋๋ค. ์ง์ด ์ฌ๋ฆฐ ์ธํ์ ๋ฐ๊ตฌ๋์ ์์ด๊ฒ ๋๋ ๋ฐ, ์ด๋ ๋ฐ๊ตฌ๋์ ๊ฐ์ฅ ์๋ ์นธ๋ถํฐ ์ธํ์ด ์์๋๋ก ์์ด๊ฒ ๋ฉ๋๋ค. ๋ค์ ๊ทธ๋ฆผ์ [1๋ฒ, 5๋ฒ, 3๋ฒ] ์์น์์ ์์๋๋ก ์ธํ์ ์ง์ด ์ฌ๋ ค ๋ฐ๊ตฌ๋์ ๋ด์ ๋ชจ์ต์ ๋๋ค.
๋ง์ฝ ๊ฐ์ ๋ชจ์์ ์ธํ ๋ ๊ฐ๊ฐ ๋ฐ๊ตฌ๋์ ์ฐ์ํด์ ์์ด๊ฒ ๋๋ฉด ๋ ์ธํ์ ํฐ๋จ๋ ค์ง๋ฉด์ ๋ฐ๊ตฌ๋์์ ์ฌ๋ผ์ง๊ฒ ๋ฉ๋๋ค. ์ ์ํ์์ ์ด์ด์ [5๋ฒ] ์์น์์ ์ธํ์ ์ง์ด ๋ฐ๊ตฌ๋์ ์์ผ๋ฉด ๊ฐ์ ๋ชจ์ ์ธํ ๋ ๊ฐ๊ฐ ์์ด์ง๋๋ค.
ํฌ๋ ์ธ ์๋ ์ ์ธํ์ด ์ง์ด์ง์ง ์๋ ๊ฒฝ์ฐ๋ ์์ผ๋ ๋ง์ฝ ์ธํ์ด ์๋ ๊ณณ์์ ํฌ๋ ์ธ์ ์๋์ํค๋ ๊ฒฝ์ฐ์๋ ์๋ฌด๋ฐ ์ผ๋ ์ผ์ด๋์ง ์์ต๋๋ค. ๋ํ ๋ฐ๊ตฌ๋๋ ๋ชจ๋ ์ธํ์ด ๋ค์ด๊ฐ ์ ์์ ๋งํผ ์ถฉ๋ถํ ํฌ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. (๊ทธ๋ฆผ์์๋ ํ๋ฉดํ์ ์ ์ฝ์ผ๋ก 5์นธ๋ง์ผ๋ก ํํํ์์)
๊ฒ์ ํ๋ฉด์ ๊ฒฉ์์ ์ํ๊ฐ ๋ด๊ธด 2์ฐจ์ ๋ฐฐ์ด board์ ์ธํ์ ์ง๊ธฐ ์ํด ํฌ๋ ์ธ์ ์๋์ํจ ์์น๊ฐ ๋ด๊ธด ๋ฐฐ์ด moves๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ํฌ๋ ์ธ์ ๋ชจ๋ ์๋์ํจ ํ ํฐํธ๋ ค์ ธ ์ฌ๋ผ์ง ์ธํ์ ๊ฐ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- board ๋ฐฐ์ด์ 2์ฐจ์ ๋ฐฐ์ด๋ก ํฌ๊ธฐ๋ "5 x 5" ์ด์ "30 x 30" ์ดํ์ ๋๋ค.
- board์ ๊ฐ ์นธ์๋ 0 ์ด์ 100 ์ดํ์ธ ์ ์๊ฐ ๋ด๊ฒจ์์ต๋๋ค.
- 0์ ๋น ์นธ์ ๋ํ๋ ๋๋ค.
- 1 ~ 100์ ๊ฐ ์ซ์๋ ๊ฐ๊ธฐ ๋ค๋ฅธ ์ธํ์ ๋ชจ์์ ์๋ฏธํ๋ฉฐ ๊ฐ์ ์ซ์๋ ๊ฐ์ ๋ชจ์์ ์ธํ์ ๋ํ๋ ๋๋ค.
- moves ๋ฐฐ์ด์ ํฌ๊ธฐ๋ 1 ์ด์ 1,000 ์ดํ์ ๋๋ค.
- moves ๋ฐฐ์ด ๊ฐ ์์๋ค์ ๊ฐ์ 1 ์ด์์ด๋ฉฐ board ๋ฐฐ์ด์ ๊ฐ๋ก ํฌ๊ธฐ ์ดํ์ธ ์์ฐ์์ ๋๋ค.
์ ์ถ๋ ฅ ์
board | moves | return |
[[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 |
์ ์ถ๋ ฅ ์ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
์ธํ์ ์ฒ์ ์ํ๋ ๋ฌธ์ ์ ์ฃผ์ด์ง ์์์ ๊ฐ์ต๋๋ค. ํฌ๋ ์ธ์ด [1, 5, 3, 5, 1, 2, 1, 4] ๋ฒ ์์น์์ ์ฐจ๋ก๋๋ก ์ธํ์ ์ง์ด์ ๋ฐ๊ตฌ๋์ ์ฎ๊ฒจ ๋ด์ ํ, ์ํ๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ผ๋ฉฐ ๋ฐ๊ตฌ๋์ ๋ด๋ ๊ณผ์ ์์ ํฐํธ๋ ค์ ธ ์ฌ๋ผ์ง ์ธํ์ 4๊ฐ ์ ๋๋ค.
๐ก ํ์ด
์๋์ํจ ํ์๋งํผ ๋ฐฐ์ด์ ์ํํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํฌ๋ ์ธ์ ์๋์ํจ ์์น๊ฐ ๋ด๊ธด ๋ฐฐ์ด moves๋ฅผ ๋จผ์ forEach๋ฌธ์ ์ฌ์ฉํ์ฌ ์ํํ๋๋ก ํ๊ณ ๊ทธ ์์ ๊ฒฉ์ํ 2์ฐจ์ ๋ฐฐ์ด์ด ๋ด๊ธด board ๋ฐฐ์ด์ ์ํํ๋๋ก ํ์ฌ ์ด์ค for๋ฌธ์ ์ฌ์ฉํ๋ค.
์ฝ๋ 5~8 ์ค
๊ทธ๋ฆฌ๊ณ , ์์ชฝ for๋ฌธ์์ ์ธํ์ ๋ฝ์(์๋์ํฌ ์ด) ์์น์ ์๋ ๊ฐ์ item ๋ณ์์ ํ ๋นํด์ฃผ์๋ค.
๋ค์์ผ๋ก item์ ๊ฐ์ด 0 ์ด๋ฉด continue๋ฅผ ํด์ ํ์ฌ ๋ฐ๋ณต์์ ๋ช ๋ น์ ์คํ์ ์ข ๋ฃํ๊ณ ๋ค์ index๋ถํฐ ๋ค์ ๋ ์ ์๊ฒ๋ ํด์คฌ๋ค.
0์ ๋น์นธ์ ์๋ฏธํ๊ธฐ ๋๋ฌธ์ ํ์ ์์น๋ฅผ ๋ค์ ํ์ ์์น๋ก ์ด๋์์ผ์ค์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ฝ๋ 10~15 ์ค
๊บผ๋ธ ์์ดํ ์ ๊ฐ์ด stack(๋ฐ๊ตฌ๋)์ ๋ง์ง๋ง ์์ดํ ๊ณผ ๊ฐ๋ค๋ฉด ํฐํธ๋ ค์ ธ ์ฌ๋ผ์ ธ์ผ ํ๊ณ ํฐํธ๋ ค์ง ์ธํ์ ๊ฐ์๋ฅผ ๊ตฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ item๋ณ์์ ๊ฐ์ด stack(๋ฐ๊ตฌ๋)์ ๋ฐฐ์ด์ ๋ง์ง๋ง ๊ฐ๊ณผ ์ผ์นํ๋ค๋ฉด stack(๋ฐ๊ตฌ๋)์ ๋ง์ง๋ง ์์ดํ ์ ๊บผ๋ด ์ฃผ๊ณ (pop), answer์ +2๋ฅผ ๋์ ์์ผฐ๋ค.
item๋ณ์์ ๊ฐ์ด stack(๋ฐ๊ตฌ๋)์ ๋ง์ง๋ง ๊ฐ๊ณผ ๋ค๋ฅด๋ค๋ฉด ๋ฝ์ ์ธํ์ ๋ฐ๊ตฌ๋์ ๋์ ์์ผ์ผ ํ๊ธฐ ๋๋ฌธ์ item๋ณ์์ ๊ฐ์ stack ๋ฐฐ์ด์ push๋ฅผ ์งํํ๋ค.
์ฝ๋ 16~17์ค
์ฌ๊ธฐ๊น์ง ๋ฌด์ฌํ ํต๊ณผํ์ผ๋ฉด ์ธํ์ ๋ฝํ๋จ ์๋ฏธ์ด๊ณ ์ธํ์ ๋ฝ์๊ธฐ ๋๋ฌธ์ ํด๋น ์์น์ ์๋ ๊ฐ์ 0์ผ๋ก ๊ต์ฒดํด์ฃผ์๋ค. 0์ผ๋ก ๊ต์ฒดํด์ฃผ์ง ์์ ๊ฒฝ์ฐ ๋ค์์ ํฌ๋ ์ธ์ด ๋๊ฐ์ ์์น์์ ๋ฝ๊ธฐ๋ฅผ ์๋ํ ๊ฒฝ์ฐ ์ ๋๋ก ์๋ํ์ง ์๋๋ค.
๋ง์ง๋ง์ผ๋ก break๋ฅผ ํ์ฌ๊ธ ๋ค์ ํฌ๋ ์ธ(move)์ด ์๋ํ ์ ์๋๋ก ํด์ฃผ์๋ค.
ํ์ด ์ฝ๋
function solution(board, moves) {
let answer = 0;
const stack = [];
moves.forEach((move) => {
for (let i = 0; i < board.length; i++) {
const item = board[i][move - 1];
if (item === 0) continue;
if (item === stack[stack.length - 1]) {
stack.pop();
answer += 2;
} else {
stack.push(item);
}
board[i][move - 1] = 0;
break;
}
});
return answer;
}
โ ์ฑ์