프로그래머스/구현
[구현] 프로그래머스 '프렌즈4블록' - js
bbeyak
2023. 4. 19. 22:23
반응형
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/17679#qna
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
2. 코드
진짜 빡구현 문제.. 이런게 코테에 나오면... 눈물 쓱.. 빡구현 문제 많이 연습해놔야겠다.
function solution(m, n, board) {
let answer = 0;
const newB = [];
for(let i=0;i<board.length;i++){
let temp = [];
for(let j=0;j<board[i].length;j++){
temp.push([board[i][j],0]);
}
newB.push(temp);
}
while(true){
let cur = 0;
// 같은 블록 찾기
for(let i=0;i<m-1;i++){
for(let j=0;j<n-1;j++){
if(newB[i][j].length && newB[i+1][j].length && newB[i][j][0] === newB[i][j+1][0]
&& newB[i][j][0] === newB[i+1][j][0] && newB[i+1][j][0] === newB[i+1][j+1][0]){
if(!newB[i][j][1]){
newB[i][j][1] = 1;
cur++;
}
if(!newB[i][j+1][1]){
newB[i][j+1][1] = 1;
cur++;
}
if(!newB[i+1][j][1]){
newB[i+1][j][1] = 1;
cur++;
}
if(!newB[i+1][j+1][1]){
newB[i+1][j+1][1] = 1;
cur++;
}
}
}
}
// 윗 블록 내리기
for(let i=0;i<m;i++){
for(let j=0;j<n;j++){
if(newB[i][j][1] && i === 0){
newB[i][j] = [];
}else if(newB[i][j][1] && i > 0){
newB[i][j] = [...newB[i-1][j]];
newB[i-1][j] = [];
}
}
}
// 빈 곳 채우기
for(let i=m-1;i>0;i--){
for(let j=0;j<n;j++){
if(!newB[i][j].length){
for(let k=i-1;k>=0;k--){
if(newB[k][j].length){
newB[i][j] = [...newB[k][j]];
newB[k][j] = [];
break;
}
}
}
}
}
answer += cur;
if(!cur) break;
}
return answer;
}
처음엔 5번 테케만 자꾸 틀렸다. 구글링을 하다가 반례 테케를 찾았다.
https://dev-note-97.tistory.com/105
[프로그래머스] [1차] 프렌즈4블록 / Python / 반례
문제주소 :programmers.co.kr/learn/courses/30/lessons/17679 더보기 문제 설명 프렌즈4블록 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 프렌
dev-note-97.tistory.com
8, 5, ['HGNHU', 'CRSHV', 'UKHVL', 'MJHQB', 'GSHOT', 'MQMJJ', 'AGJKK', 'QULKK']
> 8
나는 위 테케가 자꾸 4로 나왔다. 문제는 블록 사이사이를 메꿔주는 코드가 잘못되었던 것이다! 이 부분 수정하니 성공!
복기
6/7
반응형