문제
프로그래머스 2018 KAKAO BLIND RECRUITMENT [3차] 압축
https://programmers.co.kr/learn/courses/30/lessons/17684
언어
자바스크립트(JavaScript)
접근 방법
- key라는 객체를 정의하고 단어를 key, 색인 번호를 value로 설정한다.
- msg 문자열에서 i 번째 문자열을 w로 i+1 번째 문자열을 c로 두고 재귀 함수를 실행한다.
- 재귀 함수에서 w+c가 사전에 있으면 그 w+c를 w로 두고 c를 그다음 단어로 두고 함수를 재귀적으로 다시 실행한다.
- 재귀 함수에서 w+c가 사전에 없으면 key에 w+c, value를 다음 색인 번호인 속성을 추가하고 w를 반환한다.
- 반환된 문자 w의 색인 번호를 추가하고 w의 길이만큼 건너뛰도록 i에 크기를 더한다.
코드
const key = {
'A':1,'B':2,'C':3,'D':4,'E':5,'F':6,'G':7,'H':8,'I':9,'J':10,
'K':11,'L':12,'M':13,'N':14,'O':15,'P':16,'Q':17,'R':18,'S':19, 'T':20,
'U':21,'V':22,'W':23,'X':24,'Y':25,'Z':26
}
let idx = 27;
function solution(msg) {
let answer = [];
for (let i=0; i<msg.length; i){
let w = msg[i];
let c = msg[i+1];
let newW = add(msg,i,w,c,0);
// 반환된 문자 w의 색인 번호를 추가하고
// w의 길이만큼 건너뛰도록 i에 크기를 더한다
answer.push(key[newW]);
i += newW.length;
}
return answer;
}
function add(msg,i,w,c,cnt){
// w+c가 사전에 있으면 그다음 단어를 붙어 다시 확인하고
// w+c가 사전에 없으면 사전에 추가하고 문자 w를 반환한다
if (key[w+c] === undefined){
key[w+c] = idx++;
console.log(w,c,key[w], key[w+c])
return w;
}else{
cnt++;
let newW = w+c;
let newC = msg[i+1+cnt];
return add(msg,i,newW,newC,cnt);
}
}
복기
- 재귀 함수를 자유롭게 사용할 줄 알아야한다.
- 재귀 함수를 호출할 때 return을 붙이는 경우가 많다. return을 의도치 않게 빼먹는 경우를 조심하자.
'개발 공부 > 알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스] [1차] 뉴스 클러스터링 (JavaScript) (0) | 2020.06.07 |
---|---|
[프로그래머스] 튜플 (JavaScript) (0) | 2020.06.07 |
[프로그래머스] 괄호 변환 (JavaScript) (0) | 2020.06.06 |
[프로그래머스] [3차] 방금그곡 (JavaScript) (0) | 2020.06.06 |
[프로그래머스] 문자열 압축 (JavaScript) (0) | 2020.06.04 |