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 | 31 |
Tags
- 파이프라인
- 타입스크립트
- 리팩토링
- CS
- 자바스크립트
- API
- js
- post
- 백준n과m(1)
- 깃허브
- 브랜치
- 백준n과m(1)js
- 백준n과 m(2)
- 깃
- 자바
- Node.js
- 백준n과 m(2)js
- 프로그래머스
- 컴퓨터공학
- 객체
- 예외처리
- Express
- 백준15649번js
- 오픈소스
- 리액트
- gui
- npm
- 웹
- 데이터베이스
- 좋아요추가
Archives
- Today
- Total
Nevertheless
[JAVA] 크레인 인형 뽑기 게임 본문
< 풀이 >
import java.util.*;
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 num=moves[i]; //작동시킨 위치
for(int j=0;j<board.length;j++){
if(board[j][num-1]==0) //값이 0이면 다음 행으로 넘어감
continue;
else{ //값이 0이 아니다 => 인형이 있다.
if(stack.isEmpty()){ //스택이 비어있으면
stack.push(board[j][num-1]);
}
else { //스택이 비어있지 않으면
if(stack.peek()==board[j][num-1]){ //스택 맨 위의 값 == 현재 값
stack.pop(); //스택에서 빼기
answer+=2; // 사라진 인형 개수 2개 증가
}
else //스택 맨 위의 값 != 현재 값
stack.push(board[j][num-1]); //스택에 넣어주기
}
board[j][num-1]=0; // 인형을 뺐으면 0으로 값 변경
break; //인형을 빼고 나면 다음 행으로 넘어가지 않기 위해 break 해주기
}
}
}
return answer;
}
}
✏️ 풀이 과정
1. moves 배열을 돌며 현재 기계를 작동시킨 위치를 num 변수에 저장한다.
2. board 배열을 열은 num-1로 고정으로, 행을 바꿔가며 반복문을 돈다.
=> board[j][num-1]의 값이 0이라면 인형이 없다는 뜻이므로 다음 행으로 넘어간다.
=> board[j][num-1]의 값이 0이 아닌 경우 ( 인형이 있음 )
① 스택이 비어 있으면 : 스택에 현재 값 넣기
② 스택이 비어 있지 않으면
- 스택 맨 위의 값과 현재 값이 같을 경우 ( 인형 터뜨려짐) : 스택에 들어있는 맨 위의 값 빼기, answer 값 2 증가
( 스택에 들어있던 인형 1개와 현재 인형 1개 )
- 스택 맨 위의 값과 현재 값이 같지 않을 경우: 스택에 현재 값 넣기
- 인형을 뺐으므로 현재 값을 0으로 변경, 다음 행으로 넘어가지 않기 위해 break 해주기
3. answer을 return
✍🏻 느낀점
처음에 인형이 있는 경우(값이 0이 아닐 때) stack 에 값을 넣고 break 문을 걸어주지 않아서 계속 같은 열에서 다른 행으로 넘어가서 이상한 값이 나왔다. 이번 문제를 통해 스택도 복습을 하고, 이전보다 스택에 대해 좀 익숙해진 것 같다. 가끔 반복문을 사용할 때, 내가 작성한 반복문이 어떻게 돌아가고 있는지 헷갈릴 때가 있는데 이 점을 늘 유의해야겠다.
'코딩테스트 > Programmers' 카테고리의 다른 글
[JAVA] 숫자 짝꿍 (0) | 2024.06.08 |
---|---|
[JAVA] 완주하지 못한 선수 (1) | 2024.06.08 |
[JAVA] 성격 유형 검사하기 (0) | 2024.06.01 |
[JAVA] 바탕화면 정리 (0) | 2024.05.27 |
[JAVA] 개인정보 수집 유효기간 (0) | 2024.05.27 |