Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 27 | 28 | 29 | 30 |
Tags
- 백준
- java
- 네트워크
- 토이프로젝트
- githubactions
- restControllerAdvice
- 도커
- http
- 메시지
- 자바
- Spring
- 데이터베이스
- 스프링
- 스프링부트
- JIRA
- http 완벽가이드
- AWS
- 트랜잭션
- HandlerExceptionResolver
- 커스텀예외
- kotlinglogging
- 프로그래머스
- 이펙티브 자바
- CI/CD
- Effective Java
- 벨먼-포드
- docker
- yaml-resource-bundle
- 국제화
- 파이썬
Archives
- Today
- Total
땃쥐네
[Programmers] [Java] [064061] 크레인 인형뽑기 게임 본문
문제
- 번호 : 064061
- 제목 : 크레인 인형뽑기 게임
- 난이도 : Level 1
- 문제 : 링크
필요 알고리즘
- Stack 자료구조에 대한 이해가 필요하다.
- java에서 Stack을 사용할 때는 java.util.Stack 을 사용한다.
- push(삽입), pop(추출), peek(마지막 요소 확인), isEmpty 메서드를 잘 사용하면 된다.
- Stack에 아무 요소가 없을 가능성이 있으므로 추출할 때는 isEmpty 메서드를 사용해 요소의 존재 여부를 파악해야 한다.
- peek 메서드를 통해 마지막 요소를 확인할 수 있다.
풀이
- github 링크 : 링크
전체 로직
public class Solution {
private static int answer = 0;
public int solution(int[][] board, int[] moves) {
Stack<Integer> stack = new Stack<>();
int position;
int doll;
for (int move : moves) {
position = calculatePositionIndex(move);
doll = extractDoll(board, position);
putDoll(stack, doll);
}
return answer;
}
}
- 인형을 담는 바구니를 Stack으로 한다.
- moves 배열을 순차대로 읽고, 지시대로 인형을 뽑아서 Stack에 놓는다.
- 계산의 편의를 위해 answer를 static 변수로 삼고 이를 사용해서 쓰도록 했다.
calculatePositionIndex
private static int calculatePositionIndex(int move) {
return move - 1;
}
- board의 각 위치에 접근할 때는 인덱스로 접근하는데 move 값은 1,2,3,4,... 의 값을 가지므로 인덱스보다 1 크다.
- 이 차이가 매우 불편하므로 인덱스로 변환한다.
extractDoll
private static int extractDoll(int[][] board, int position) {
int current = 0;
for (int i=0; i<board.length; i++) {
current = board[i][position];
if (current > 0) {
board[i][position] = 0;
return current;
}
}
return current;
}
- 지정 위치의 인형을 추출한다.
- 인형을 찾아내면 그 값을 반환하고, 해당 위치의 인형을 지운다.(0으로 바꿈)
- 만약 인형이 없으면 0을 반환한다.
putDoll
private void putDoll(Stack<Integer> stack, int doll) {
if (doll == 0) {
return;
}
if (!stack.isEmpty() && stack.peek() == doll) {
stack.pop();
answer += 2;
return;
}
stack.push(doll);
}
- 위에서 가져온 인형을 stack에 놓는다.
- 인형이 0이면 아무 것도 하지 않는다.
- stack 최상단에 같은 인형이 있으면 쌍으로 터뜨린다.
- 같은 인형이 없으면 그냥 push 한다.
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] [120890] 가까운 수 (0) | 2023.01.18 |
---|---|
[Programmers] [Java] [120866] 안전지대 (0) | 2023.01.17 |
[Programmers] [Java] [120846] 합성수 찾기 (0) | 2023.01.13 |
[Programmers] [Python] [042576] 완주하지 못한 선수 (0) | 2023.01.12 |
[Programmers] [Java] [120840] 구슬을 나누는 경우의 수 (0) | 2023.01.12 |
Comments