한 걸음씩
[프로그래머스][JS] 숫자 문자열과 영단어 본문
https://school.programmers.co.kr/learn/courses/30/lessons/81301
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이 과정
function solution(s) {
const obj = {
'zero': '0',
'one' : '1',
'two' : '2',
'three' : '3',
'four' : '4',
'five' : '5',
'six' : '6',
'seven' : '7',
'eight' : '8',
'nine' : '9'
}
const numStr = Object.keys(obj)
const num = Object.values(obj)
const arr = s.split('') // 문자열 s를 모두 쪼개서 배열로
let answer = []
let rest = ''
for (let i = 0; i < arr.length; i++){
if (!isNaN(parseInt(arr[i]))){ // 숫자이면 answer배열에 push
// → !isNaN해야 중복된 문자 처리함
answer.push(arr[i])
}else{ // 1. 숫자가 아니고
rest += arr[i] // 2. rest 빈문자열에 arr[i] 요소를 하나씩 더하는데
if (numStr.includes(rest)){ // 3. key들만 빼서 저장한 배열에 rest가 존재하면
answer.push(rest) // 4. answer배열에 push
rest = '' // rest문자열을 초기화해야 이전의 값이 누적되지 않음
}
}
}
// 위의 과정까지가 문자로 표현된 숫자들을 분리하는 과정
// 아래의 과정은 문자로 표현된 숫자들을 숫자형으로 바꿔주는 과정
for (let i = 0; i < answer.length; i++){
if (answer[i] !== '0' && !parseInt(answer[i])){ // 해당 요소가 '0'이 아니고 문자여야함
// → '0'이 나올 경우 undefined 처리하지 않음
answer.splice(i, 1, obj[answer[i]]) // obj객체에서 key값(answer[i)을 이용해 value에 접근
}
}
return Number(answer.join('')); // answer은 배열이고 문자열이라서 join으로 문자열로 변환 후 숫자로 변환해야한다
}
// console.log(solution("1zerotwozero3")) // 중복된 문자가 나오는 경우
// console.log(solution("one00")) // '0'이 나오는 경우
△ 코드 설명은 주석 참고!
시간제한도 있어서 이중 반복을 하면 시간초과가 발생한다.
마지막에 있는 2개의 테스트 케이스까지 반드시 고려해줘야 한다
function solution(s) {
var answer = 0;
const arr = ['zero','one','two','three','four','five','six','seven','eight','nine',]
arr.forEach((e, i) =>
s = s.split(e).join(i)
)
return Number(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문자열을 numbers[i]를 기준으로 분리하여 arr배열에 저장
answer = arr.join(i); // arr 배열을 구분자 i값을 사용하여 다시 저장
}
return Number(answer);
}
split과 join을 단순히 배열, 문자열 치환 메서드라고 알고 있다면 위의 코드처럼 절대 풀 수 없다...
split은 () 괄호 안의 어떤것을 기준으로 분리하여 배열로 만들고
join은 () 괄호안의 구분자 어떤 값을 기준으로 문자열로 만든다
https://school.programmers.co.kr/learn/courses/30/lessons/120894
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
▲ 비슷한 유형의 문제
'Programmers' 카테고리의 다른 글
[프로그래머스][JS] 구슬을 나누는 경우의 수 ✅ (0) | 2023.07.09 |
---|---|
[프로그래머스][JS] 과일 장수 (0) | 2023.07.08 |
[프로그래머스][JS] 주사위 게임 3 (0) | 2023.07.07 |
[프로그래머스][JS] 유한소수 판별하기 (0) | 2023.07.07 |
[프로그래머스][JS] 직사각형 넓이 구하기 (0) | 2023.07.06 |