티스토리 뷰
이 문제는 일단 문자-키를 매핑해주는 게 가장 중요하다.
1. 문자 - 키 매핑
2. target 문자열 처리
3. 결과 반환
따라서, 어떻게 문제를 매핑해줘야하는지에 대한 부분에 신경써서 문제를 풀었다.
먼저 객체를 생성해주고,
그 부분에 문자와 키를 매핑해주었다.
keymap 배열을 순회하며 각 키가 할당된 객체를 만들어,
딕셔너리에 저장해주었다.
const charPresses = {};
keymap.forEach((key) => {
for (let i = 0; i < key.length; i++) {
const char = key[i];
const presses = i + 1;
if (!charPresses[char] || presses < charPresses[char]) {
charPresses[char] = presses;
}
}
});
이후 targets 배열을 순회하며 target 문자열에 대한 최소 횟수를 계산했다.
만약 입력할 수 없다면 -1을 반환하는 코드 역시 제작했다.
다음은 구현한 코드이다.
구현 코드
function solution(keymap, targets) {
const charPresses = {};
keymap.forEach((key) => {
for (let i = 0; i < key.length; i++) {
const char = key[i];
const presses = i + 1;
if (!charPresses[char] || presses < charPresses[char]) {
charPresses[char] = presses;
}
}
});
return targets.map(target => {
let totalPresses = 0;
for (const char of target) {
if (!charPresses[char]) {
return -1;
}
totalPresses += charPresses[char];
}
return totalPresses;
});
}
다른 사람의 코드
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;
}
더 깔끔하지만 초심자에게는 내 코드가 조금 더 가독성있을 것 같다.
시간복잡도를 간단하게 계산해보았는데,
어차피 둘 다 keymap을 초기화하고 targets을 처리하는 것이 동일하기 때문에
크게 시간복잡도면에서 차이가 없었다.
'Oops, All Code! > 🤯 Oops, My Algorithm!' 카테고리의 다른 글
♡̈ 08. 프로그래머스:: 추억 점수 (0) | 2024.07.10 |
---|---|
♡̈ 07. 프로그래머스:: 둘만의 암호 (0) | 2024.07.08 |
♡̈ 05. 프로그래머스:: 덧칠하기 (0) | 2024.07.08 |
♡̈ 04. 프로그래머스:: 기사단원의 무기 (0) | 2024.07.08 |
- ̗̀ෆෆ ̖́ 08. 기본 입출력에 관한 예제 (0) | 2024.07.08 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 타입좁히기
- 플리마켓운영
- react
- 도서추천
- 소사벌
- 대학생플리마켓
- 트러블슈팅
- 경험플리마켓
- js
- 프로토타입
- javascript
- 비즈플리마켓
- 회고
- 어휘력
- 플리마켓후기
- 도서리뷰
- 서평
- 대학생팝업스토어
- 소사벌맛집
- 코딩테스트
- 어른의어휘공부
- 책추천
- 우아한테크코스
- 안성스타필드
- 카페추천
- typescript
- 카드뉴스
- 프론트엔드
- 일급객체
- 프리코스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함