티스토리 뷰
반응형
문제를 보고 뭔가 금방 풀 수 있을 것 같았다..
꼭 마지막 예외처리에 안 되어버리면 붙들고 있게 되는데 오늘은 이 마지막단계에서 이 문제를 3시간 동안 붙들고 있었다 ㅠㅠ
다른 분들이 푼 답을 보니 정규표현식으로 해결이 가능한 것이었다. 어제 정규표현식 관한 문제를 풀어서 생각을 안 했던 것은 아닌데 안 쓰고 풀고 싶었나 보다..
제출 답안
내가 제출한 답안은 테스트 케이스가 무조건 오름차순일 때나 내림차순으로 쓰였을 때, sort()를 쓰면 정렬이 되므로 정답처리까지는 되었을 것이다.
하지만 문제는 오름차순이나 내림차순이 아니며, 랜덤으로 배치되고 중복까지 허용한다.
"1zerotwozero3" 은 1020으로 나와야했고, 내 코드는 뒤에 zero를 체크하지못해 1023만 반환했다.
function solution(s) {
let answer = 0;
const table = [
"zero",
"one",
"two",
"three",
"four",
"five",
"six",
"seven",
"eight",
"nine",
];
let convert = [];
for (let i = 0, j = 0; i < s.length; ++i) {
if (isNaN(s[j]) === false) {
convert.push(s[j]);
}
if (s.indexOf(table[i]) !== -1) {
let str = s.slice(
s.indexOf(table[i]),
s.indexOf(table[i]) + table[i].length
);
let num = table.indexOf(str);
convert.push(num);
}
j += 1;
}
answer = +convert.join("");
return answer;
}
// console.log(solution("one4seveneight")); // 1478
// console.log(solution("2three45sixseven")); // 234657
// console.log(solution("1zerotwozero3")); // 1023
올바른 답안 1) split(), join()을 이용한 풀이
정규표현식이 아닌 방법으로 푼 풀이 중 가장 직관적이면서 좋은 풀이법을 가져왔다.
split으로 문자열 사이의 영어를 나누고 나뉜 배열을 join()을 배열의 인덱스를 사용해 다시 숫자로 합치는 것이다.
간단해 보이지만 이런 발상으로 푼다는 게 결코 쉽지 않다. 덕분에 사고력은 길렀다.
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);
}
올바른 답안 2) 정규표현식을 이용한 풀이
대부분 사람들이 이렇게 푼 것 같다. 사실문제 출제자도 정규표현식을 이용해서 풀으라는 목적으로 출제했을 것이다.
근데 출제자가 의도하지 않은 위 풀이처럼 풀었다면 근데 잘 풀었고, 좋은 풀이라면?? 플러스일까 마이너스일까?
문제 의도를 잘 파악하는 걸 더 중요시한다면 아래의 풀이법이 더 좋겠지만, 사고력을 중요하게 여긴다면 윗사람 풀이를 더 좋게 봤을 것 같다.
function solution(s) {
let answer = 0;
s = s.replace(/zero/g, 0);
s = s.replace(/one/g, 1);
s = s.replace(/two/g, 2);
s = s.replace(/three/g, 3);
s = s.replace(/four/g, 4);
s = s.replace(/five/g, 5);
s = s.replace(/six/g, 6);
s = s.replace(/seven/g, 7);
s = s.replace(/eight/g, 8);
s = s.replace(/nine/g, 9);
answer = Number(s);
return answer;
}
반응형
'알고리즘 > 프로그래머스-Programmers' 카테고리의 다른 글
[프로그래머스] 크레인 인형뽑기 게임 - 자바스크립트(JavaScript) (0) | 2022.03.30 |
---|---|
[프로그래머스] 키패드 누르기 - 자바스크립트(JavaScript) (0) | 2022.03.29 |
[프로그래머스] 로또의 최고 순위와 최저 순위 - 자바스크립트(JavaScript) (0) | 2022.03.29 |
[프로그래머스-해시] 베스트앨범 - 자바스크립트(JavaScript) 베스트 풀이 해석 (0) | 2022.03.22 |
[프로그래머스-해시] 베스트앨범 - 자바스크립트(JavaScript) (0) | 2022.03.22 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 타입스크립트
- python
- 모두를위한컴퓨터과학
- 리액트네이티브
- cs50
- 자바스크립트 비동기 처리
- React
- css
- 자바스크립트알고리즘
- 무한스크롤
- 프로그래머스 자바스크립트
- 실전프로젝트
- GIT
- 클로저
- reactquery
- 모두를 위한 컴퓨터 과학
- 알고리즘자바스크립트
- github
- 항해99
- 프로그래머스
- html
- React Query
- 자바스크립트 클로저
- 백준
- network
- 네트워크
- 프로그래머스 베스트앨범 자바스크립트
- 리액트
- 자바스크립트
- javascript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함