⚡문제정보
지금 기준 최신으로 나온 문제 중 하나입니다.
문제가 정말...더럽게 길지만. 여러분들의 시간을 위해 문제를 요약하자면 이렇습니다.
한번의 드래그로 모든 파일을 버리고 싶다.
근데 최소한의 드래그로 버릴 방법을 찾아줘라
반환은 [y,x , y ,x] 좌표 형식으로 반환해라.
입출력을 보면 직관적입니다.
그냥 .은 비어있는걸 뜻하고 #은 파일이 있는걸 뜻합니다.
그리고 반환은
[y축에서 가장 작은값, x축에서 가장 작은값, y축에서 가장 큰값 +1 , x축에서 가장 큰값 +1]
을 반환하면된다...
문제가 너무 어지럽게 길어서 문제를 파악하고 여기까지 생각이 도달하는 것이 어렵지
구현 자체는 쉬워서 1레벨이 아닌가... 생각해봅니다.
🔍접근방법
1레벨이니까 브루트포스해도 되겠지 뭐기도했지만
x,y축의 최대길이가 50 , 50이었습니다.
50^2는 2500 최악의 경우에도 2500번 순회면 뭐... 충분히 브루트포스해도 되겠다는 생각으로
그냥 다 찾으면서 정석대로 풀었습니다.
생각해보니 Map을 굳이 쓸 필요도없이 배열을 만들어줘도 되었겠지만.
그냥 map에다가 배열을 담는 형식으로 풀었습니다.
😑나의 풀이
function solution(wallpaper) {
let map = new Map()
map.set('arrX',[])
map.set('arrY',[])
let answer = []
wallpaper.forEach((ele,y) => {
let spliter = ele.split('')
spliter.forEach( (it,x) => {
let pushx = map.get('arrX')
let pushy = map.get('arrY')
if(it === '#') {
pushx.push(x)
pushy.push(y)
}
})
})
answer.push(Math.min(...map.get('arrY')))
answer.push(Math.min(...map.get('arrX')))
answer.push(Math.max(...map.get('arrY')) +1 )
answer.push(Math.max(...map.get('arrX')) +1)
return answer
}
근데 굳이 이럴필요가 없었다는 점..
한번의 순회로 풀 방법을 생각해봤습니다.
물론 내부적으로는 아니겠지만... indexOf와 lastIndexOf를 잘조합하면
어차피 중간 값들은 쓰레기니까
모두 완전탐색하는거보다는 훨씬 효율적일것입니다.
function solution(wallpaper) {
let [arrX,arrY,answer] = [[],[],[]]
wallpaper.forEach((ele,y) => {
let min = ele.indexOf("#")
let max = ele.lastIndexOf("#")
if(min !== -1) {
arrX.push(min)
arrY.push(y)
}
if(max !== -1) {
arrX.push(max)
arrY.push(y)
}
})
answer.push(Math.min(...arrY), Math.min(...arrX) , Math.max(...arrY)+1, Math.max(...arrX)+1)
return answer
}
이렇게 느리던 테스트가...
indexof를 적극사용하니 확실히 성능이 더 좋아졌네요
반응형
'programmers' 카테고리의 다른 글
[Programmers Level 2] 피로도 Javascript (0) | 2023.03.23 |
---|---|
[Programmers Level 1] 덧칠하기 Javascript (0) | 2023.03.22 |
[Programmers Level 2 집합] [1차] 뉴스 클러스터링 Javascript (1) | 2023.01.19 |
[Programmers Level 3] 야근지수 Javascript (0) | 2023.01.12 |
[Programmers Level 2] 스킬트리 Javascript (0) | 2023.01.11 |