반응형
*** 본 풀이는 java
언어를 사용하였습니다 ***
요약
board
안의 인형을moves
순서대로 집어서바구니
에 담는다.바구니에 담을 때
같은 인형이 2개
면 인형이 사라진다.
사라진 인형의 개수
를 구하라.
2차원 배열
, stack
자료구조에 대한 이해가 있는지 점검하는 문제인 듯 하다.
풀이
바구니에 넣을 때 바구니의 아래쪽부터 쌓이는 방식이므로
stack
자료구조를 이용하면 되겠다고 생각했다.
바구니에 넣을 때, 가장 최근에 바구니에 들어간 인형을 비교하여
인형이 동일하면 바구니의 최근 인형을 제거하는 식으로 코딩을 했더니 쉽게 문제를 풀 수 있었다.
제출 코드
import java.util.Stack;
public class Solution {
private int countOfMissDoll;
public int solution(int[][] board, int[] moves) {
Stack<Integer> result = new Stack<>();
countOfMissDoll = 0;
for (int move : moves) {
moveTong(board, result, move - 1);
}
return countOfMissDoll;
}
private void moveTong(int[][] board, Stack<Integer> result, int move) {
for (int i = 0; i < board.length; i++) {
int current = board[i][move];
if (isPutDollInBasket(current)) {
putDollInBasket(board, result, current, i, move);
break;
}
}
}
private boolean isPutDollInBasket(int current) {
return current != 0;
}
private void putDollInBasket(int[][] board, Stack<Integer> result, int current, int i, int move) {
if (isSamePreDoll(current, result)) {
result.pop();
countOfMissDoll += 2;
board[i][move] = 0;
return;
}
result.push(current);
board[i][move] = 0;
}
private boolean isSamePreDoll(int current, Stack<Integer> result) {
return result.size() >= 1 && result.peek() == current;
}
}
회고
사실 문제 자체는 크게 어려운 부분은 없어서
리팩토링
습관을 기르기 위해 메서드를 분리하는데에 시간을 더 많이 썼다.
면접 대비를 한다고 알고리즘에 손을 잠시 놓고 있었는데
곧 있을 프로그래머스 Dev-Matching 챌린지에 대비하기 위해서 다시 달려야겠다.
나 자신, 화이팅!!
반응형
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 : 완주하지 못한 선수 (0) | 2021.08.13 |
---|---|
프로그래머스 : 기능개발 (0) | 2021.08.11 |
2020 KAKAO BLIND RECRUITENT : 자물쇠와 열쇠 (0) | 2020.01.23 |
2020 KAKAO BLIND RECRUITENT : 괄호 변환 (0) | 2020.01.21 |
프로그래머스 LEVEL 3 : 타일 장식물 (0) | 2019.04.08 |
댓글