Coding Test

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - (JAVA) - 64061 : ํฌ๋ ˆ์ธ ์ธํ˜•๋ฝ‘๊ธฐ ๊ฒŒ์ž„ (2019 ์นด์นด์˜ค ๊ฐœ๋ฐœ์ž ๊ฒจ์šธ ์ธํ„ด์‹ญ) ์˜ค๋‹ต๋…ธํŠธ ๋ฐ ํ’€์ด

ํ”„๋กœ๊ทธ๋ž˜๋จธ ์˜ค์›” 2023. 9. 21.

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

 

 

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

 

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

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

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 ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

 

โœ”๏ธ์ œํ•œ ์‚ฌํ•ญ

  • board ๋ฐฐ์—ด์€ 2์ฐจ์› ๋ฐฐ์—ด๋กœ ํฌ๊ธฐ๋Š” "5 x 5" ์ด์ƒ "30 x 30" ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • board์˜ ๊ฐ ์นธ์—๋Š” 0 ์ด์ƒ 100 ์ดํ•˜์ธ ์ •์ˆ˜๊ฐ€ ๋‹ด๊ฒจ์žˆ์Šต๋‹ˆ๋‹ค.
  • 0์€ ๋นˆ ์นธ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • 1 ~ 100์˜ ๊ฐ ์ˆซ์ž๋Š” ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์ธํ˜•์˜ ๋ชจ์–‘์„ ์˜๋ฏธํ•˜๋ฉฐ ๊ฐ™์€ ์ˆซ์ž๋Š” ๊ฐ™์€ ๋ชจ์–‘์˜ ์ธํ˜•์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • moves ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” 1 ์ด์ƒ 1,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • moves ๋ฐฐ์—ด ๊ฐ ์›์†Œ๋“ค์˜ ๊ฐ’์€ 1 ์ด์ƒ์ด๋ฉฐ board ๋ฐฐ์—ด์˜ ๊ฐ€๋กœ ํฌ๊ธฐ ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

 

โœ”๏ธ์ž…์ถœ๋ ฅ ์˜ˆ

board moves result
[[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๊ฐœ ์ž…๋‹ˆ๋‹ค.

 

 

 

๐Ÿช„ํ’€์ด๋ฒ• (์Šคํฌ์ฃผ์˜)

 

ํ’€์ด๋ฒ•์œผ๋กœ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ์Šคํƒ์„ ์จ์„œ ํ’€์–ด์•ผ ํ•œ๋‹ค. ์ผ๋‹จ ๋ณด๋“œ๊ฐ€ ๋“ค์–ด ์˜ค๋Š” ๊ฐ’์ด ์„ธ๋กœ๊ฐ€ ์•„๋‹ˆ๋ผ ์›๋ž˜ ์ด์ค‘๋ฐฐ์—ด ํ˜•ํƒœ์˜ ๊ฐ’์œผ๋กœ ๋“ค์–ด ์˜จ๋‹ค๋Š” ๊ฑธ ์•Œ์•„์•ผํ•œ๋‹ค. ์ฒ˜์Œ์—” board[0] ๋ฐฐ์—ด์ด 1๋ฒˆ์— ์„ธ๋กœ๋กœ ๊ฐ’์ด ๋“ค์–ด์˜ค๋Š” ๊ฒฝ์šฐ์ธ์ค„ ์•Œ๊ณ 

HashMap<Integer, Stack<Integer>> ์จ์„œ ํ’€์—ˆ๋‹ค๊ฐ€ ๋ฌธ์ œ๋ฅผ ์ž˜๋ชป ์ดํ•ดํ–ˆ๋‹ค๋Š” ๊ฑธ ์บ์น˜ ํ•˜๊ณ  ๋ฐ”๋กœ ์Šคํƒ๋งŒ ์จ์„œ ํ’€์—ˆ๋‹ค.

๊ทธ๋Ÿผ ๋งž๊ฒŒ ํ’€์—ˆ๋Š”๋ฐ๋„ ์˜ค๋‹ต๋…ธํŠธ๋ฅผ ์“ฐ๋Š” ์ด์œ ๋Š” ๋ญ๋ƒ๋ฉด, ์•„์ฃผ ์–ด์ด ์—†๋Š” ๋ถ€๋ถ„์„ ์‹ค์ˆ˜ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

 

โญ•ํ’€์ด

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.util.Stack;
 
class Solution {
    public int solution(int[][] board, int[] moves) {
        Stack<Integer> stack = new Stack<>();
        int answer = 0;
        for (int i = 0; i < moves.length; i++) {
            int line = moves[i];
            for (int y = 0; y < board.length; y++) {
                if (board[y][line - 1!= 0) {
                    int tmp = board[y][line - 1];
                    board[y][line - 1= 0;
                    if (!stack.isEmpty() && stack.peek() == tmp) {
                        stack.pop();
                        answer += 2;
 
                    } else {
                        stack.push(tmp);
                    }
                    break;
                }
            }
        }
        return answer;
    }
}
cs

 

 

์˜ค๋‹ต๋…ธํŠธ๋ฅผ ์“ฐ๋Š” ์ด์œ ๋Š” ๋ฐ”๋กœ 11ํ–‰ 12ํ–‰ ๋•Œ๋ฌธ์ด๋‹ค.

int tmp = board[y][line-1];
board[y][line-1] = 0;

์ธํ˜•์„ ๋ฝ‘์•˜์œผ๋ฉด ๋ฝ‘์€ ์œ„์น˜์—๋Š” 0์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ  ์ž„์‹œ ์ €์žฅ ๊ฐ’์œผ๋กœ ๋น„๊ตํ•ด์•ผํ•˜๋Š”๋ฐ, tmp๋„ ์“ฐ์ง€ ์•Š๊ณ  0์œผ๋กœ๋„ ๋ฐ”๊ฟ”์ฃผ์ง€ ์•Š์•„์„œ ๋ฌธ์ œ๊ฐ€ ํ‹€๋ ธ๋˜ ๊ฒƒ์ด๋‹ค.

if (board[y][line-1] !=0){
    if (!stack.isEmpty() && stack.peek() == board[y][line-1]){
    	stack.pop();
    	answer += 2;
    } else {
    	stack.push(board[y][line-1]); 
    }
    break;
}

์ด๋ ‡๊ฒŒ ํ’€์—ˆ์œผ๋‹ˆ ํ‹€๋ฆด๋งŒ ํ–ˆ๋‹ค.

๊ฐ’์„ ๋ฝ‘์•˜์œผ๋ฉด ํ•ด๋‹น์œ„์น˜์—” ๋นˆ๊ฐ’์œผ๋กœ ๋ฐ”๊ฟ”์ค˜์•ผํ•œ๋‹ค๋Š” ๊ฑธ ์žŠ์ง€๋ง์ž!!!

 

๋Œ“๊ธ€