https://school.programmers.co.kr/learn/courses/30/lessons/160586
레벨이 높아지면서 여러 로직들이 중첩되는 문제들이 나온다.
로직이 많아지다 보니 머릿속과 함께 코드가 뒤죽박죽 되버리는 경우가 많다.
무작정 코드를 짜기보다는 먼저 글로 알고리즘 순서를 설계하고
그 후 차근차근 코드를 구현하는 것이 효과적인 방식인 것 같다.
최종 풀이
function solution(keymap, targets) {
return targets.map((str)=>{
let answer = 0;
[...str].forEach((t)=>{
let arr = [];
keymap.forEach((k)=>{
arr.push([...k].indexOf(t)===-1 ? Infinity : [...k].indexOf(t)+1)
})
answer += Math.min(...arr)
})
return answer != Infinity ? answer : -1
})
}
indexOf 에서 요소를 찾지 못하면 -1을 반환하기 때문에
-1을 Infinity로 바꾸어 indexOf의 최솟값을 구하는 과정에서 걸리지 않게 했다.
다른 사람의 풀이
function solution(keymap, targets) {
const answer = [];
const map = {}
for (const items of keymap) {
items.split('').map((item, index) => map[item] = (map[item] < index+1 ? map[item] : index+1))
}
for (const items of targets) {
answer.push(items.split('').reduce((cur, item) => cur += map[item], 0) || -1)
}
return answer;
}
object를 만들어 keymap 각 대문자에 index를 부여하고 삼항연산자를 통해 중복된 문자는 더 작은 index를 부여했다.
또한 reduce를 사용하여 targets의 각 문자에 부여된 index를 누적해서 더했다. (object에 없다면 -1 출력)
나같은 코테 아쎄이들에겐 굉장한 코드이다.
object 생성과 reduce 함수 둘다 아직 익숙치 않기 때문에
어떤 상황과 로직에서 이런 방법들을 사용하는지
위 풀이를 통해서 배울 수 있었다.
'Coding Test' 카테고리의 다른 글
[JS] 프로그래머스 / 바탕화면 정리 (0) | 2024.12.23 |
---|---|
[JS] 프로그래머스 / 덧칠하기 (0) | 2024.12.21 |
[JS] 프로그래머스 / <PCCP 기출문제> / 1번 - 동영상 재생기 (0) | 2024.12.16 |
[JS] 프로그래머스 / 푸드 파이트 대회 (0) | 2024.12.14 |
[JS] 프로그래머스 / 크기가 작은 부분 문자열 (0) | 2024.12.13 |