프로그래머스 코테 문제를 풀고나서 다른 사람의 풀이를 봤다.
내게 더욱 사고를 할 수 있도록 도와준 풀이법이라 생각해 포스팅 하려한다.
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/81301
내 코드
function solution(s) {
let map = new Map();
map.set("zero", 0);
map.set("one", 1);
map.set("two", 2);
map.set("three", 3);
map.set("four", 4);
map.set("five", 5);
map.set("six", 6);
map.set("seven", 7);
map.set("eight", 8);
map.set("nine", 9);
function match(word) {
if (map.has(word)) {
return map.get(word);
}
}
s = s.replace(/(zero|one|two|three|four|five|six|seven|eight|nine)/gm, match);
return +s
}
다른 사람 코드
function solution(s) {
let numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
var answer = s;
for(let i=0; i< numbers.length; i++) {
let arr = answer.split(numbers[i]);
answer = arr.join(i);
}
return Number(answer);
}
내 코드 총 실행 시간 : 평균 약 0.0035초
다른 사람 코드 총 실행 시간 : 평균 약 0.0035초
배열에 값들을 미리 담고 반복문을 실행해 해당 원소를 기준으로 입력값을 split한다.split을 하면 기준이 되었던 해당 문자는 공백처리가 된다. 여기서 반복문의 인덱스를 join의 기준으로 지정한게 대박 센스다.
코드가 간결하니 보기가 좋다.
지금까지 내 머릿속엔 문자열 내에서 특정 단어를 대체하려 할 때 replace 함수를 사용해야 한다는 생각이 대부분이었다. 그래서일까 배열의 인덱스, split, join 만으로 단어를 대체할 수 있는 방법이 무척 신기했고 인상 깊었다. 계속 머리속에 담아두어야겠다.
p.s 오늘 컨디션 정말 최악이다...