- [JS] 영어가 싫어요-프로그래머스 1208942024년 06월 15일
- 주사위 clice
- 작성자
- 2024.06.15.:44
반응형문제 설명
영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 numbers가 매개변수로 주어질 때, numbers를 정수로 바꿔 return 하도록 solution 함수를 완성해 주세요.제한사항
numbers는 소문자로만 구성되어 있습니다.
numbers는 "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" 들이 공백 없이 조합되어 있습니다.
1 ≤ numbers의 길이 ≤ 50
"zero"는 numbers의 맨 앞에 올 수 없습니다.
입출력 예
numbers result
"onetwothreefourfivesixseveneightnine" 123456789
"onefourzerosixseven" 14067
입출력 예 설명
입출력 예 #1"onetwothreefourfivesixseveneightnine"를 숫자로 바꾼 123456789를 return합니다.
입출력 예 #1"onefourzerosixseven"를 숫자로 바꾼 14067를 return합니다.
문제풀이 생각하기
일단 문자열을 '나누고'나서 배열에 집어넣는다
그러면 배열이 ['one', 'two', ... 'nine] 이런식으로 된다
그 다음에 배열을 순회하면서 One이 나오면 1을 출력하고, two가 나오면 2를 출력해야겠다. 이때 객체의 key-value 관계를 이용하면 편하겠다!
이제 이 풀이 순서를 따라서 코드를 차근차근 작성해보자
코드 짜기
1. key는 영어, value는 숫자인 객체를 만들어준다
const englishAndNumber={ zero:0, one:1, two:2, three:3, four:4, five:5, six:6, seven:7, eight:8, nine:9 }
2. zero, one, two, ... nine 을 기준으로 나누고 배열에 집어넣는다
나누는 기준이 '스페이스 바 한 개' 인 경우는 split(' ')이라고 쓰면 되지만, 이 경우는 나누는 기준이 여러개이다
나누는 기준이 여러 개인 경우에는 정규표현식을 사용한다
arrayedNumber=numbers.split(/(zero|one|two|three|four|five|six|seven|eight|nine)/).filter(Boolean);
3. 배열을 순회하면서 값을 Key로 하는 value를 찾는다. (처음에 선언한 englishAndNumber 객체에서)
let answer=[]; for(let i of arrayedNumber) answer.push(englishAndNumber[i]);
for of 문을 쓰는것에 주의하자
또한 정답 배열에 넣어야 하니까 .push 를 이용해 배열의 마지막 값에 value를 넣어주었다
4. 이제 answer을 출력한다
이때! 배열을 숫자로 반환하겠다고 그냥 join('')을 사용하게 되면 문자열 '1234가 출력된다
문제에서는 '정수'로 반환하라고 하였다
따라서 join('') 한 것에 parseInt로 묶어서 문자열을 정수로 바꾸어준다
return parseInt(answer.join(''));
최종 코드
const englishAndNumber={ zero:0, one:1, two:2, three:3, four:4, five:5, six:6, seven:7, eight:8, nine:9 } const solution=(numbers)=>{ arrayedNumber=numbers.split(/(zero|one|two|three|four|five|six|seven|eight|nine)/).filter(Boolean); let answer=[]; for(let i of arrayedNumber) answer.push(englishAndNumber[i]); return parseInt(answer.join('')); }
다른 사람 풀이(유저 최다 풀이)
function solution(numbers) { const obj = { zero: 0, one: 1, two: 2, three: 3, four: 4, five: 5, six: 6, seven: 7, eight: 8, nine: 9 }; const num = numbers.replace(/zero|one|two|three|four|five|six|seven|eight|nine/g, (v) => { return obj[v]; }); return Number(num); }
나는 split으로 문자열을 배열로 나눈 다음에 하나 하나 다시 순회하면서 바꿨는데
다른 사람들은 한번에 문자열을 돌면서 숫자로 바꿨다이게 더 효율적인것 같다
시험기간인데 공부하기 싫어서 블로그 글 자주 쓰게 된다 😆
ⓒ clice lee clicelee
클라이스의 개발일지 입니다반응형'프론트 > Javascript Typescript' 카테고리의 다른 글
[JS] 절대 사용하면 안되는 eval 함수에 대해 (프로그래머스 120902 문자열 계산하기) (2) 2024.07.08 [자바스크립트] 캐릭터의 좌표 - 프로그래머스 120861 객체의 속성값 전달하여 변경하기 (0) 2024.06.19 [JS] 7의 개수-프로그래머스 120912 join(' ') split(' ') filter() 함수 (0) 2024.06.06 [JS로 코테 정복하기] 자주 나오는 함수 정리 + 관련 프로그래머스 문제들 (0) 2024.06.06 [자바스크립트] True와 False 에러 Uncaught ReferenceError (0) 2024.05.31 다음글이전글이전 글이 없습니다.댓글