파이썬, 자바스크립트_카카오 Lv.1 - 숫자 문자열과 영단어

naughty _deer·2022년 4월 28일
0

코딩테스트

목록 보기
2/7

ref: https://programmers.co.kr/learn/courses/30/lessons/81301

문제 요약

일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임
일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수
s가 의미하는 원래 숫자를 return

제한

1 ≤ s의 길이 ≤ 50
"zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.

풀기 전 생각

문자열 다루는 문제, 해시테이블 관련 문제
s의 길이가 50밖에 되지 않기 때문에,
1초에 2000만번 연산을 하는 파이썬에겐 충분하다.

풀이 계획

  1. 숫자의 영어 이름을 key, 해당 숫자를 value로 하는 alpha 사전 자료형 선언.
  2. tmp 문자열 선언하고,s 돌면서 tmp에 넣어주기
  3. is.digit()이 True라면 그대로 answer에 넣기
  4. tmp에 s[i]값 넣을 때마다 alpha에 있는지 확인.
    있다면, answer에 alpha[tmp]값 넣어주기, tmp 비워주기
    없다면, tmp 에 넣어주기

풀이 코드

Python

def solution(s):
  alpha =['zero','one','two','three','four','five','six','seven','eight','nine']
  alpha_dic = {}
  for i in range(len(alpha)):
    alpha_dic[alpha[i]] = str(i)
  
  answer = ''
  tmp = ''
  for i in s:
    if i.isdigit():
      answer += i
      continue
    tmp += i
    if tmp in alpha_dic:
      answer += alpha_dic[tmp]
      tmp = ''

  return int(answer)

Javascript

// function solution(s) {
//   const digitAlpha = ['zero','one','two','three','four','five','six','seven','eight','nine'];
//   const digitMap = new Map();
//   for(let i=0; i<digitAlpha.length; i++){
//     digitMap.set(digitAlpha[i],i)
//   }
  
//   let answer = '';
//   let tmp = '';
//   for(let i=0; i<s.length; i++){
//     if(Number(s[i])){
//       answer += s[i];
//     } else{
//       tmp += s[i];
//     };
//     if (digitMap.has(tmp)){
//       answer += digitMap.get(tmp);
//       tmp = '';
//     }
//   }
//   return parseInt(answer);
// }

Map 자료형 사용하지 않고, Array indexing으로 풀 수 있지만,
연습을 위해, Map 자료형 사용.

profile
개발자로 취업하기

0개의 댓글