๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค[Java] - ํฌ๋ ˆ์ธ ์ธํ˜•๋ฝ‘๊ธฐ ๊ฒŒ์ž„(Stack, 2019 ์นด์นด์˜ค ๊ฐœ๋ฐœ์ž ๊ฒจ์šธ ์ธํ„ด์‹ญ)

by ์ฃผ๋ฐœ2 2020. 3. 31.
๋ฐ˜์‘ํ˜•

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

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

 

๋™์ ์œผ๋กœ ์‚ฌ๋ผ์ง€๋Š”๊ฒŒ ์‹ ๊ธฐํ•ด์„œ ๊ฐ€์ ธ์™€๋ด„ ใ…Žใ…Ž

์ฝ”๋“œ

import java.util.Stack;

class Solution {
	public static int solution(int[][] board, int[] moves) {
		int answer = 0;
		Stack<Integer> s = new Stack<Integer>();
		for(int i=0; i<moves.length; i++) {
			for(int j=0; j<board.length; j++) {
				/* 
				 * ํ•ด๋‹น ์นธ์— ์ธํ˜•์ด ์กด์žฌํ•˜๋Š”๊ฒฝ์šฐ
				 * ↓ ์•„๋ž˜๋กœ ๋‚ด๋ ค๊ฐ€๋ฏ€๋กœ ํ–‰์˜ ๊ฐ’์ด ๊ณ„์† ๋ฐ”๊ปด์•ผํ•จ (0,0), (1,0), (2,0) ...
				 * moves๋ฐฐ์—ด์— ์žˆ๋Š” ์š”์†Œ๋ฅผ board[][] ๋ฐฐ์—ด์˜ '์—ด' ๊ฐ’์— ๋„ฃ์–ด์„œ ๋น„๊ต
				 * ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ -1
				 */ 
				if(board[j][moves[i]-1] != 0) {
					
					// ์Šคํƒ์ด ๋น„์–ด์žˆ๋Š”๊ฒฝ์šฐ -> ํ•ด๋‹น ์ธํ˜• ๋„ฃ๊ธฐ
					if(s.isEmpty())
						s.push(board[j][moves[i]-1]);
					
					// ์Šคํƒ์ด ๋น„์–ด์žˆ์ง€ ์•Š๋Š”๊ฒฝ์šฐ -> ์ธํ˜•์ด ๋™์ผํ•œ์ง€ ์•„๋‹Œ์ง€ ๋น„๊ต
					else {
						// ์ธํ˜•์ด ๋™์ผํ•˜๋ฉด ์ œ๊ฑฐ ํ›„ ์‚ฌ๋ผ์ง„ ์ธํ˜•๊ฐœ์ˆ˜ +2
						if(s.peek() == board[j][moves[i]-1]) {
							s.pop();
							answer += 2;
						}
						// ์ธํ˜•์ด ๋™์ผํ•˜์ง€ ์•Š์œผ๋ฉด ์Šคํƒ์— ์ธํ˜• ๋„ฃ๊ธฐ
						else {
							s.push(board[j][moves[i]-1]);
						}
					}
					// ํ•ด๋‹น ์ž‘์—… ๋๋‚œ ํ›„์—๋Š” ์ธํ˜•์„ ๋นผ๋ƒˆ์œผ๋ฏ€๋กœ 0์œผ๋กœ ๋งŒ๋“ ๋‹ค.(์ธํ˜•์ด ์—†๋‹ค๋Š” ํ‘œ์‹œ)
					board[j][moves[i]-1] = 0;
					break;
				}
			}
		}
		return answer;
	}
}

ํ’€์ด

์Œ ๋ฌธ์ œ์—์„œ๋ถ€ํ„ฐ ํ•œ๊ฐœ์”ฉ ์ œ๊ฑฐ๋˜๊ณ , ๋ฒฝ์ด ๋ง‰ํ˜€์žˆ์–ด์„œ Stack์„ ํ™œ์šฉํ•˜๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ์Šคํƒ์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

๋ฌธ์ œ์— ๋งž๊ฒŒ ๊ทธ๋Œ€๋กœ ๊ตฌํ˜„ํ•˜๊ณ , ์„ค๋ช…์€ ์ฃผ์„์œผ๋กœ ๋‹ค ๋‹ฌ์•˜๋‹ค.

๊ฐ„๋žตํžˆ ์„ค๋ช… & ํ’€์ด๋ฅผ ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

board[][] 2์ฐจ์› ๋ฐฐ์—ด์— ์ธํ˜•์˜ ์ข…๋ฅ˜๊ฐ€ ์ˆซ์ž๋กœ ์ฃผ์–ด์ง„๋‹ค. 0 ~ 100

moves[] 1์ฐจ์› ๋ฐฐ์—ด์—๋Š” ๋ช‡๋ฒˆ์งธ ํ–‰์˜ ์ธํ˜•์„ ๋นผ์˜ฌ๊ฑด์ง€ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

1) moves[] ๋ฐฐ์—ด์— ์žˆ๋Š” ์š”์†Œ์ค‘ board[][]์˜ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ์ธํ˜•์„ ์ œ๊ฑฐํ•œ๋‹ค.

(board[][] ๋ฐฐ์—ด์˜ ํ–‰์„ ๊ธฐ์ค€์œผ๋กœ ํŒ๋‹จ์„ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— moves[]๋ฐฐ์—ด์˜ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ↓ ์•„๋ž˜๋กœ ๋น„๊ตํ•˜๋ฉฐ ํƒ์ƒ‰ํ•ด์•ผํ•œ๋‹ค. ๊ฐ’์ด 0์ผ๊ฒฝ์šฐ ์ธํ˜•์ด ์—†๋Š”๊ฑฐ๋กœ ํŒ๋‹จ. ์ฃผ์„ ์ฐธ๊ณ )

 

2) ์Šคํƒ์ด ๋น„์–ด์žˆ์œผ๋ฉด ์Šคํƒ์— ์Œ“๊ณ , 

 

3) ์Šคํƒ์ด ๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฉด ์Šคํƒ์— ์Œ“์„์ง€ ์Šคํƒ์—์„œ ์ œ๊ฑฐํ• ์ง€๋งŒ ํŒ๋‹จํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

   - ํ˜„์žฌ ์Šคํƒ์— ์Œ“์ธ ์ธํ˜•๊ณผ ๋™์ผํ•œ ์ธํ˜•์ผ ๊ฒฝ์šฐ -> ์Šคํƒ์—์„œ ์ œ๊ฑฐ ํ›„ ์ œ๊ฑฐํ•œ ์ธํ˜• ๊ฐฏ์ˆ˜ +2

   - ํ˜„์žฌ ์Šคํƒ์— ์Œ“์ธ ์ธํ˜•๊ณผ ๋‹ค๋ฅธ ์ธํ˜•์ผ ๊ฒฝ์šฐ -> ์Šคํƒ์— ๊ทธ๋Œ€๋กœ ์Œ“์œผ๋ฉด ๋œ๋‹ค.

 

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€