티스토리 뷰
https://school.programmers.co.kr/learn/courses/30/lessons/81301
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
for문
function solution(s) {
const numbers = {
zero: "0",
one: "1",
two: "2",
three: "3",
four: "4",
five: "5",
six: "6",
seven: "7",
eight: "8",
nine: "9"
}
let answer = ""
let temp = ""
for(let i = 0; i < s.length; i++) {
if(isNaN(s[i])) {
temp += s[i]
} else {
answer += s[i]
}
if(numbers[temp]) {
answer += numbers[temp]
temp = ""
}
}
return Number(answer)
}
- 0부터 9까지의 영문자와 그에 해당하는 숫자를 객체로 만듦
- 빈 문자열을 담은 변수 answer과 temp 만듦
- 주어진 s를 한 글자씩 조회하도록 반복
- 현재 인덱스에 해당하는 값이 숫자가 아닌 문자일 경우(isNan) temp에 더함
- 숫자일 경우는 바로 answer에 더함
- temp가 처음에 만들었던 객체의 키 값일 경우(one, two와 같이 영단어가 완성됐을 경우)
answer에 해당 키 값에 대한 숫자(value)를 더하고 temp를 다시 빈 문자열로 만듦
- 완성된 answer를Number 타입으로 바꾸어 return
다른 사람의 풀이
split(), join()
function solution(s) {
let numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
for(let i = 0; i < numbers.length; i++) {
let arr = s.split(numbers[i]); // 영단어를 구분자로 사용
s = arr.join(i); // numbers 배열의 영단어가 인덱스 번호, i의 값과 동일하므로 가능
}
return Number(s);
}
- 영단어를 차례대로 담은 numbers 배열에 담음
(이 때 영단어는 인덱스를 문자로 바꾼 것과 동일 : 0번째 인덱스 => zero) - numbers 배열의 길이만큼 반복
- split() 사용해 영단어를 구분자로 사용
- 구분자로 사용한 영단어 자리에 해당 숫자(i)를 join
- 완성된 s를 Number 타입으로 바꾸어 return
replace(), 정규 표현식
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);
}
- 메서드를 잘 활용하면 코드가 간결해지는 것 같다
- 성능 면에서도 그게 좋을지는 잘 모르겠다
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 1단계 - 이상한 문자 만들기 (javascript) (0) | 2022.08.04 |
---|---|
[프로그래머스] 1단계 - 모의고사 (javascript) (0) | 2022.08.02 |
[프로그래머스] 1단계 - K번째수 (javascript) (0) | 2022.07.27 |
[프로그래머스] 1단계 - 없는 숫자 더하기 (javascript) (0) | 2022.07.26 |
[프로그래머스] 1단계 - 두 개 뽑아서 더하기 (javascript) (0) | 2022.07.25 |
댓글