개발하는 사막여우
개발하는 사막여우
개발하는 사막여우
전체 방문자
오늘
어제
  • All (310)
    • 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.. (12)
      • Cozubi (6)
      • lol-chess (0)

블로그 메뉴

  • Github

공지사항

인기 글

태그

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

최근 댓글

최근 글

티스토리

반응형
hELLO · Designed By 정상우.
개발하는 사막여우

개발하는 사막여우

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

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

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

문제주소 : 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
    개발하는 사막여우
    개발하는 사막여우
    개발개발 주저리주저리

    티스토리툴바