반응형
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/17679#qna
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
8, 5, ['HGNHU', 'CRSHV', 'UKHVL', 'MJHQB', 'GSHOT', 'MQMJJ', 'AGJKK', 'QULKK']
> 8
나는 위 테케가 자꾸 4로 나왔다. 문제는 블록 사이사이를 메꿔주는 코드가 잘못되었던 것이다! 이 부분 수정하니 성공!
복기
6/7
반응형
'프로그래머스 > 구현' 카테고리의 다른 글
[구현] 프로그래머스 '2개 이하로 다른 비트' - js (0) | 2023.04.24 |
---|---|
[구현] 프로그래머스 '뒤에 있는 큰 수 찾기' - js (1) | 2023.04.20 |
[구현] 프로그래머스 '파일명 정렬' - js (0) | 2023.04.18 |
[구현] 프로그래머스 '방문 길이' - js (0) | 2023.04.17 |
[문자열] 프로그래머스 '스킬트리' - js (0) | 2023.04.12 |