일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- redux-toolkit
- redux-saga
- json-server
- 코딩테스트합격자되기
- useDispatch
- react
- 테코테코
- 알고리즘
- programmers
- axios
- C++
- react-router
- react-redux
- Python
- 이코테
- maeil-mail
- 프로그래머스
- 자바
- sw expert academy
- 매일메일
- Algorithm
- 항해99
- JavaScript
- SW
- createSlice
- 리액트
- java
- 항해플러스
- redux
- Get
- Today
- Total
Binary Journey
[프로그래머스] 숫자 문자열과 영단어 본문
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
문제의 규칙(?)은 이러하다.
** Javascript
씐난다. 이번에도 풀고 나서 엄청 뿌듯했다.
댓글 달린 날짜들 보니까 대부분 7월 초-중순이다. 2021 카카오 문제인 것만 알았는데 생각보다 올라온 지 얼마 안 된 문제였나 보다.
내 풀이는 이렇다.
function solution(s) {
const numbers = [
"zero", "one", "two", "three", "four",
"five", "six", "seven", "eight", "nine"
];
for (const number of numbers) {
s = s.replace(new RegExp(`${number}`,'g'), numbers.indexOf(number));
}
return Number(s);
}
일단 숫자들을 index대로 배열 안에 나열해놓았다.
그래서 numbers.indexOf("zero") 하면 0 나오고 numbers.indexOf("seven") 하면 7이 나올 수 있도록!
시간이 조금 걸렸던 부분은 replace 함수 안에 넣을 정규식 부분이었는데
나는 비교할 문자열이 변수로 들어가 있어서 /숫자문자열/g 이걸 넣을 수가 없었다.
// <- 이 안에 들어가면 백틱(`)도 소용이 없다.
문자열 전체 비교를 하려면 /g 글로벌 조건을 걸어야 하기 때문에 방법을 찾아내는 데 조금 걸렸다.
javascript replace regular expression constructor 이렇게 찾다가 얻어걸린 RegExp!
https://developer.mozilla.org/ko/docs/orphaned/Web/JavaScript/Reference/Global_Objects/RegExp
제가 원한 건 이 설명이었죠
RegExp.prototype.global (en-US)정규 표현식이 문자열 내에서 가능한 모든 경우에 일치하는지, 아니면 최초에 대해서만 일치하는지 나타냅니다.
그래서 저 하이퍼링크를 타고 들어간 게 아래 사이트다.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/global
모질라의 데모 소스를 보면
const regex1 = new RegExp('foo', 'g');
console.log(regex1.global);
// expected output: true
const regex2 = new RegExp('bar', 'i');
console.log(regex2.global);
// expected output: false
이렇게!! g를!! 쓸 수 있다!!!
예시를 더 보면
replace 에 어떻게 적용해야 하는지까지도 친절하게 알려준다!
추천이 가장 많은 다른 풀이를 보면
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);
}
여기도 배열의 인덱스 특성을 활용하였는데 굳이 정규식을 쓰지 않아도 되는 참신한 방법이었다.
s 에 포함되어 있는 문자열로 split을 하면 문자열 전후로 s 가 분리되면서 배열 형태로 리턴된다.
그리고 그 과정에서 포함되어있던 문자열은 자연스럽게 제거된다.
문자열 대신 index를 넣어 join 하면 끝인데
결과적으로 문자열이 숫자로 자연스럽게 치환되어 보인다.
세상에 머리 좋은 사람들은 많다.
접근성을 길러야겠다. 같은 문제도 더 쉽게 풀 수 있는 방법으로
'프로그래머스 > level 1' 카테고리의 다른 글
[프로그래머스] 행렬의 덧셈 (0) | 2021.07.23 |
---|---|
[프로그래머스] 정수 제곱근 판별 (0) | 2021.07.22 |
[프로그래머스] 문자열 내림차순으로 배치하기 (0) | 2021.07.21 |
[프로그래머스] 문자열 내 마음대로 정렬하기 (0) | 2021.07.21 |
[프로그래머스] x만큼 간격이 있는 n개의 숫자 (0) | 2021.07.20 |