[프로그래머스] 숫자 문자열과 영단어 / Javascript

2021. 9. 1. 21:00·Programmers
반응형

문제주소 : https://programmers.co.kr/learn/courses/30/lessons/81301?language=javascript# 

 

코딩테스트 연습 - 숫자 문자열과 영단어

네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자

programmers.co.kr


<문제 설명>

더보기

문제 설명

네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.

다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.

  • 1478 → "one4seveneight"
  • 234567 → "23four5six7"
  • 10203 → "1zerotwozero3"

이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.

참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다.

숫자영단어
0 zero
1 one
2 two
3 three
4 four
5 five
6 six
7 seven
8 eight
9 nine

제한사항

  • 1 ≤ s의 길이 ≤ 50
  • s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.
  • return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.

입출력 예

sresult
"one4seveneight" 1478
"23four5six7" 234567
"2three45sixseven" 234567
"123" 123

입출력 예 설명

입출력 예 #1

  • 문제 예시와 같습니다.

입출력 예 #2

  • 문제 예시와 같습니다.

입출력 예 #3

  • "three"는 3, "six"는 6, "seven"은 7에 대응되기 때문에 정답은 입출력 예 #2와 같은 234567이 됩니다.
  • 입출력 예 #2와 #3과 같이 같은 정답을 가리키는 문자열이 여러 가지가 나올 수 있습니다.

입출력 예 #4

  • s에는 영단어로 바뀐 부분이 없습니다.

제한시간 안내

  • 정확성 테스트 : 10초

 

<풀이법>

▒ 한줄 개념: 조건문 분기 ▒ 

조건문 분기를 통해 해결하는 문제입니다. 반복문을 돌며 각 글자를 확인하여 분기에 따라 동작하며, 핵심 로직은 다음과 같습니다.

 

1. 'z', 'o', 'e', 'n'의 경우 무조건 하나의 단어만이 나올 수 있습니다.

z: zero
o: one
e: eight
n: nine

 

2. 't', 'f', 's'의 경우 각 두가지 단어가 나올 수 있습니다.

t: two/three
f: four/five
s: six/seven

 

3. 기본 숫자의 경우, 그대로 사용할 수 있습니다.

0, 1, 2, 3, 4, 5, 6, 7, 8, 9

 

위의 규칙에 따라 단어를 answer에 추가시켜주면서, i 값을 해당 글자 길이만큼 증가시켜, 불필요한 확인을 줄여줍니다.

ex) 'z' -> answer += '0' -> i += 4(zero의 길이 4)

ex) 'e' -> answer += '8' -> i += 5(eight의 길이 5)

ex) '9' -> answer += '9' -> i += 1(숫자 문자 그대로의 길이 1)

<코드(Javascript)>

function solution(s) {
    let answer = '';
    let i = 0;
    
    const numbers = {
        zero: { len: 4, char: '0' },
        one: { len: 3, char: '1' },
        two: { len: 3, char: '2' },
        three: { len: 5, char: '3' },
        four: { len: 4, char: '4' },
        five: { len: 4, char: '5' },
        six: { len: 3, char: '6' },
        seven: { len: 5, char: '7' },
        eight: { len: 5, char: '8' },
        nine: { len: 4, char: '9' },
    }
    
    const update = char => {
        if(numbers[char]){
            answer += numbers[char].char;
            return numbers[char].len;
        }else{
            answer += char;
            return 1;
        }
    }
    
    while(i < s.length){
        const char = s.charAt(i);
        const nextChar = s.charAt(i+1);
        i += char === 'z' ? update('zero') 		// 'z'로 시작할경우 0
            : char === 'o' ? update('one') 		// 'o'로 시작할경우 1
            : char === 't' ? nextChar === 'w'
                ? update('two') 				// 't'로 시작하고 'w'일 경우 2
                : update('three') 				// 't'로 시작하고 'w'가 아닐 경우 3
            : char === 'f' ? nextChar === 'o'
                ? update('four') 				// 'f'로 시작하고 'o'일 경우 4
                : update('five') 				// 'f'로 시작하고 'o'가 아닐 경우 5
            : char === 's' ? nextChar === 'i'
                ? update('six') 				// 's'로 시작하고 'i'일 경우 6
                : update('seven') 				// 's'로 시작하고 'i'가 아닐 경우 7
            : char === 'e' ? update('eight')  	// 'e'로 시작할경우 8
            : char === 'n' ? update('nine') 	// 'n'로 시작할경우 9
            : update(char); 					// 그 외일 경우 숫자 문자
    }
    return Number(answer);
}

 

 

더 많은 코드 보기(GitHub) : github.com/dwkim-97/CodingTest

 

 

반응형
저작자표시 (새창열림)

'Programmers' 카테고리의 다른 글

[프로그래머스] 표 편집 / Javascript  (0) 2021.09.02
[프로그래머스] 거리두기 확인하기 / Javascript  (0) 2021.09.01
[프로그래머스] 퍼즐 조각 채우기 / Javascript  (2) 2021.09.01
[프로그래머스] 부족한 금액 계산하기 / Javascript  (0) 2021.08.29
[프로그래머스] 2개 이하로 다른 비트 / JavaScript  (0) 2021.05.20
'Programmers' 카테고리의 다른 글
  • [프로그래머스] 표 편집 / Javascript
  • [프로그래머스] 거리두기 확인하기 / Javascript
  • [프로그래머스] 퍼즐 조각 채우기 / Javascript
  • [프로그래머스] 부족한 금액 계산하기 / Javascript
개발하는 사막여우
개발하는 사막여우
개발개발 주저리주저리
    반응형
  • 개발하는 사막여우
    개발하는 사막여우
    개발하는 사막여우
  • 전체
    오늘
    어제
    • All (311)
      • Books (13)
        • 읽기 좋은 코드가 좋은 코드다 (13)
      • Study (6)
        • Blockchain (3)
        • Algorithm (3)
      • Baekjoon (36)
      • Programmers (166)
      • LeetCode (15)
      • Open Source (1)
        • Youtube Popout Player (1)
      • Language (32)
        • Python (9)
        • JS (8)
        • Java (5)
        • HTML (6)
        • CSS (4)
      • Library & Framework (15)
        • React.js (15)
      • IDE (2)
        • IntelliJ (2)
      • Airdrop (9)
      • Tistory (2)
      • etc.. (7)
        • Cozubi (6)
        • lol-chess (0)
  • 블로그 메뉴

    • Github
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    Cozubi
    파이썬
    코인줍줍
    클린 코드
    프로그래머스 위클리 챌린지
    카카오 알고리즘 문제
    코딩테스트연습
    programmers
    2018 KAKAO BLIND RECRUITMENT
    클린 코드 작성법
    프로그래머스
    카카오 코딩테스트
    읽기 좋은 코드가 좋은 코드다
    백준
    신규 코인 에어드랍
    알고리즘문제풀이
    Python
    Java
    카카오 공채
    코주비
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
개발하는 사막여우
[프로그래머스] 숫자 문자열과 영단어 / Javascript
상단으로

티스토리툴바