문제 Lv.1 크레인 인형뽑기
: 게임화면 = N × N
격자 아래부터 차곡차곡 쌓여있음
크레인 위치를 좌우로 옮겨 가장 위에 있는 인형 집어올려 바구니에 넣는다
바구니에 같은 모양의 인형이 두 개 만나면 터져서 없어진다
(바구니는 모든 인형이 다 들어갈 수 있는 여유로운 크기이다)
[예시문제]
: 격자 = 2차원 배열 board, 크레인 위치 = moves
: board = [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]
: moves = [1,5,3,5,1,2,1,4]
: result = 4
: 바구니 = [4,3,1,1,3,2,4]
[코드]
import java.util.*;
class Solution {
public int solution(int[][] board, int[] moves) {
Stack<Integer> s = new Stack<>();
int result = 0;
for(int i =0; i<moves.length;i++){
for(int j =0; j<board.length;j++){
if(board[j][moves[i]-1]!=0){
if(!s.empty() && s.peek() == board[j][moves[i]-1]){
result ++;
s.pop();
board[j][moves[i]-1] = 0;
break;
}
else{
s.push(board[j][moves[i]-1]);
board[j][moves[i]-1]=0;
break;
}
}
}
}
return result*2;
}
}
: Stack<Integer> s = new Stack<>(); 스택 설정
: int result = 0; 결과 설정
: for(int i =0; i<moves.length;i++){ 크레인 위치가 board 열 위치를 나타낸다 (몇번째 열인지 파악 가능)
for(int j =0; j<board.length;j++){ board 행을 j를 이용해 순차적으로 계산
if(board[j][moves[i]-1]!=0){ board j행 moves의 열 / 다만 moves 값은 1부터 시작하지만
board의 열은 0번부터 시작하므로 moves[i]에서 -1 해준다
if(!s.empty() && s.peek() == board[j][moves[i]-1]){ 스택 peek 값 = board의 데이터값
result ++; 결과 + 1해주고
s.pop(); 해당 peek는 스택에서 빼기
board[j][moves[i]-1] = 0; 해당 board 값은 0으로 수정
break;
}
else{ 스택이 비어있거나 스택의 peek 값과 board의 데이터 값이 다르다면
s.push(board[j][moves[i]-1]); 해당 board값을 스택에 넣어준다
board[j][moves[i]-1]=0; board는 0으로 정정
break;
}
}
}
}
: return result*2; result는 한쌍을 의미한다 그래서 ×2 해주기
https://school.programmers.co.kr/learn/courses/30/lessons/64061
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
* 독학으로 익히는 코딩이라 틀린 것이 있을 수 있습니다. 오류가 있다면 댓글을 통해 알려주세요. 감사합니다. *
'Programmers > Lv.1' 카테고리의 다른 글
[프로그래머스] Lv.1 바탕화면 정리 JAVA 풀이 (0) | 2024.06.28 |
---|---|
[프로그래머스] Lv.1 공원 산책 JAVA 풀이 (0) | 2024.06.28 |
[프로그래머스] Lv.1 덧칠하기 JAVA 풀이 (0) | 2023.08.24 |
[프로그래머스] Lv.1 추억 점수 JAVA 풀이 (2) | 2023.08.21 |
[프로그래머스] Lv.1 달리기 경주 JAVA 풀이 (0) | 2023.08.21 |