반응형
문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/64061
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이 힌트
01. moves를 반복문으로 돈다. 근데 그 때의 값에서 -1을 값이 board에서의 줄이다.
02. board[i][몇번째 줄] !== 0 일 때가 뽑아야 하는 인형이다.
03. 뽑은 인형이, 바구니의 맨 끝 숫자랑 같은지 확인하고
- 같다면 바구니의 맨 끝 인형 빼주고, cnt+=2
- 같지 않다면 바구니에 뽑은 인형 그냥 쌓는다.
문제 풀이 코드
function solution(board, moves) {
let bakuni = []; //바구니
let cnt = 0;
function check(num){ // 선택한 줄에서 인형 뽑는 함수
for(let i=0; i<board.length; i++){
if(board[i][num] !== 0){ //인형을 발견할 때
if(bakuni[bakuni.length-1] !== board[i][num]){ //뽑은 인형 !==바구니 끝 인형
bakuni.push(board[i][num]); //바구니에 뽑은 인형 넣기
board[i][num] =0; //게임 뽑기에서 인형 뽑았으니 0으로 값 채우기
return 0;
}else{ //뽑은 인형 === 바구니 끝 인형
bakuni.pop(); //바구니에 있던 마지막 인형 빼기
board[i][num] =0; //게임 뽑기에서 인형 뽑았으니 0으로 값 채우기
return 2; //인형 두개 없애기
}
}
}
return 0; //선택한 줄에 인형이 없을 때
}
for(let i=0; i<moves.length; i++){
cnt += check(moves[i]-1)
}
return cnt;
}
Only 풀이 코드
function solution(board, moves) {
let bakuni = [];
let cnt = 0;
function check(num){
for(let i=0; i<board.length; i++){
if(board[i][num] !== 0){
if(bakuni[bakuni.length-1] !== board[i][num]){
bakuni.push(board[i][num]);
board[i][num] =0;
return 0;
}else{
bakuni.pop();
board[i][num] =0;
return 2;
}
}
}
return 0;
}
for(let i=0; i<moves.length; i++){
cnt += check(moves[i]-1)
}
return cnt;
}
반응형
'알고리즘 문제 풀기' 카테고리의 다른 글
프로그래머스 : [1차] 비밀지도 - javascript(toString(), padStart()) (0) | 2024.04.05 |
---|---|
이진수 함수 dfs로 구현하기 (0) | 2024.04.05 |
프로그래머스: [1차] 다트 게임 - javascript(switch, 정규식) (0) | 2024.04.03 |
프로그래머스 : 로또의 최고 순위와 최저 순위 - javascript(이분탐색 활용) (0) | 2024.04.01 |
헷갈리는 객체 키와 값 가져오기 (for...in 반복문 /Object.keys() ) (0) | 2024.03.22 |