https://school.programmers.co.kr/learn/courses/30/lessons/160586
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
레벨이 높아지면서 여러 로직들이 중첩되는 문제들이 나온다.
로직이 많아지다 보니 머릿속과 함께 코드가 뒤죽박죽 되버리는 경우가 많다.
무작정 코드를 짜기보다는 먼저 글로 알고리즘 순서를 설계하고
그 후 차근차근 코드를 구현하는 것이 효과적인 방식인 것 같다.
최종 풀이
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) | 2025.01.09 |
---|---|
[JS] 프로그래머스 / 바탕화면 정리 (0) | 2024.12.23 |
[JS] 프로그래머스 / 덧칠하기 (0) | 2024.12.21 |
[JS] 프로그래머스 / <PCCP 기출문제> / 1번 - 동영상 재생기 (0) | 2024.12.16 |
[JS] 프로그래머스 / 푸드 파이트 대회 (0) | 2024.12.14 |