티스토리 뷰
https://programmers.co.kr/learn/courses/30/lessons/81301
코딩테스트 연습 - 숫자 문자열과 영단어
네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자
programmers.co.kr
해결 방법
1. 각 영단어에 해당하는 숫자를 키-값 배열로 저장
2. 입력받은 문자열에 영단어(키)가 포함되어 있으면 숫자(값)로 바꾸기 (for문, if 문 사용)
풀이
function solution(s) {
let num_eng = {zero: 0, one: 1, two: 2, three: 3, four: 4, five: 5,
six: 6, seven: 7, eight: 8, nine: 9};
for (let eng of Object.keys(num_eng)) {
if (s.includes(eng) === true) {
s = s.replace(new RegExp(eng, "g"), num_eng[eng]);
}
}
return Number(s);
}
배운 점
1. /변수말고문자열/
처음에는 s = s.replace(/eng/g, num_eng[eng]);
이 코드로 했으나 테스트 케이스 1개만 성공했다는 결과가 나왔다
아래와 같은 다른 분의 풀이를 보니 슬래시 사이에 eng라는 변수를 사용해서 그런듯 하다
function solution(s) {
s = s.replace(/zero/g, 0)
.replace(/one/g, 1)
.replace(/two/g, 2)
.replace(/three/g, 3)
.replace(/four/g, 4)
.replace(/five/g, 5)
.replace(/six/g, 6)
.replace(/seven/g, 7)
.replace(/eight/g, 8)
.replace(/nine/g, 9)
return Number(s);
}
2. 정규표현식
구글링과 오픈 카톡에도 질문해본 결과,
s = s.replace(new RegExp(eng, "gi"), num_eng[eng]);
이렇게 정규식을 사용해도 모든 테스트 케이스가 통과됨을 알 수 있었다
RegExp는 정규표현식의 약어로, 문자열에서 특정 문자 조합을 찾기 위한 패턴이라고 한다
RegExp(pattern, flags)에서 flags에는 g i m s y u 를 사용할 수 있다
1. g: 문자열 전체를 확인한다.
2. i: 문자열 에서 대소문자를 구분하지 않는다.
3. m: 문자열 에서 `^` , `$` 에서 개행문자를 허용한다.
4. s: 문자열 에서 `.` 에서 개행문자를 허용한다.
5. y: lastIndex 부터 일치하는 문자열을 반환한다.
6. u: Unicode 코드 포인트의 시퀀스로 처리한다.
Javascript 와 RegExp 정규 표현식
자바스크립트를 처음부터 다시 공부해보려고 한다.
pks2974.medium.com
3. 프로그래머스엔 아직 replaceAll이 없다..?
정규표현식 말고 replaceAll 메소드를 사용해서도 가능했다
근데 codepen에서는 분명 모든 테스트 케이스 결과가 맞게 나오는데
프로그래머스에서는 1개의 테스트 케이스만 통과했다고 나왔다..
알아본 결과, replaceAll은 최신 메소드라 현재 프로그래머스에서는 구현이 불가하다는 것..!
프로그래머스에서는 가능하면 최신 메소드 사용을 지양해야겠다
4. split 응용
구글링을 하며 다른 분들의 다양한 풀이를 본 결과
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);
}
위의 풀이가 가장 간결하면서도 친근한 split을 내가 생각치 못한 방법으로 사용하여 인상깊었다
영문자를 기준으로 split하여 arr에 저장했다가 해당 영문자의 숫자로 다시 합쳐 answer에 저장하는 방법이다
나도 이렇게 창의적이면서도 깔끔한 코드로 누군가에게 좋은 인상을 줄 수 있는 개발자가 되고 싶다
'JS-algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 체육복 (javascript) (0) | 2022.05.04 |
---|---|
[프로그래머스] 신규 아이디 추천 (javascript) (0) | 2022.05.02 |
[프로그래머스] K번째 수 (javascript) (0) | 2022.04.30 |