https://school.programmers.co.kr/learn/courses/30/lessons/161990
문제를 읽고 이해하는 데만 상당한 시간이 들었다..
하지만 막상 알고리즘 짜는 건 어렵지 않았다.
indexOf, lastIndexOF, 최대 최소만 이용하면 무난하게 풀릴 것 같았다.
최종 풀이
function solution(wallpaper) {
let lux;
for(let i=0; i<wallpaper.length; i++) {
if(wallpaper[i].includes('#')) {
lux = i;
break
}
}
let luy = Math.min(...wallpaper.map((a)=>
a.indexOf('#')===-1 ? Infinity : a.indexOf('#')
))
let rdx;
for(let i=wallpaper.length-1; i>=0; i--) {
if(wallpaper[i].includes('#')) {
rdx = i+1;
break
}
}
let rdy = Math.max(...wallpaper.map((a)=>
a.lastIndexOf('#')
))+1
return [lux, luy, rdx, rdy]
}
예상대로 답을 도출하는 것은 수월했지만
성능, 가독성 부분에선 개선해야 할 점이 많은 것 같다.
다른 사람의 풀이
function solution(wallpaper) {
let left = [];
let top = [];
let right = []
let bottom = [];
wallpaper.forEach((v,i) => {
[...v].forEach((val,ind) => {
if(val === "#") {
left.push(i)
top.push(ind)
right.push(i + 1)
bottom.push(ind + 1)
}
})
})
return [Math.min(...left), Math.min(...top), Math.max(...right), Math.max(...bottom)]
}
성능, 가독성 면에서 참 세련된 코드이다.
indexOf, lastIndexOf 대신 조건문을 이용하여 양옆 좌표를 구했는데
간단하면서도 참신한 아이디어 같다.
'Coding Test' 카테고리의 다른 글
[JS] 프로그래머스 / 삼총사 (0) | 2025.01.09 |
---|---|
[JS] 프로그래머스 / 숫자의 표현 (0) | 2025.01.09 |
[JS] 프로그래머스 / 대충 만든 자판 (0) | 2024.12.21 |
[JS] 프로그래머스 / 덧칠하기 (0) | 2024.12.21 |
[JS] 프로그래머스 / <PCCP 기출문제> / 1번 - 동영상 재생기 (0) | 2024.12.16 |