코딩테스트 연습 | 숫자 문자열과 영단어 | 2021 카카오 채용연계형 인턴십 | python

2022. 5. 5. 23:00·👨‍💻 Dev Note/코딩테스트
반응형

[문제설명]

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

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

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

[문제]

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

 

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

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

[제한사항]

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

[입출력 예]

s result
"one4seveneight" 1478
"23four5six7" 234567
"2three45sixseven" 234567
"123" 123

[입출력 예 설명]

입출력 예 #1

문제 예시와 같습니다.

입출력 예 #2

문제 예시와 같습니다.

입출력 예 #3

문제 예시와 같습니다.

입출력 예 #4

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

[제한시간 안내]

정확성 테스트: 10초


[문제풀이]

replace 함수의 존재만 알고있다면 매우 쉬운 문제이다. 굳이 for loop을 돌지 않아도 쉽게 처리가 가능한 문제였다.

아래 코드에서는 굳이

answerStr = answerStr.replace('zero', '0')

answerStr = answerStr.replace('one', '1')

...

이런 식으로 코드를 길게 쓰지 않고, 코드라인 줄바꿈 + 체이닝을 사용하였다.

def solution(s):

    answerStr = s
    answerStr = answerStr.replace('zero', '0') \
    .replace('one', '1') \
    .replace('two', '2') \
    .replace('three', '3') \
    .replace('four', '4') \
    .replace('five', '5') \
    .replace('six', '6') \
    .replace('seven', '7') \
    .replace('eight', '8') \
    .replace('nine', '9');

    answer = int(answerStr)

    return answer

replace chaining 코드실행 결과

 

두 번째 방식으로는, 문자열과 숫자를 key, value로 하는 dictionary를 미리 정의한 후, for loop를 통해 replace하는 방식이다.

def solution(s):
    answerStr = s
    dict_str_to_num = {'zero': '0', 'one': '1', 'two': '2', 'three': '3', 'four': '4', 'five': '5', 'six': '6', 'seven': '7', 'eight': '8', 'nine': '9', }

    for item in dict_str_to_num.items():
        answerStr = answerStr.replace(item[0], item[1])

    answer = int(answerStr)

    return answer

for loop을 통한 replace 코드 실행 결과

 

처리해야 하는 데이터의 양이 크지도 않기 때문에, 둘 중 어느 방식으로 해도 성능에 큰 영향이 없는 것을 확인할 수 있다. 이 문제의 경우 코드의 양이 줄어든 것도 아니기 때문에 본인의 스타일에 맞는 방식을 택하면 될 것 같다.

반응형
저작자표시 비영리 변경금지 (새창열림)

'👨‍💻 Dev Note > 코딩테스트' 카테고리의 다른 글

코딩테스트 연습 | 키패드 누르기 | 2020 카카오 인턴쉽 | python  (0) 2022.05.07
코딩테스트 연습 | 없는 숫자 더하기 | 월간 코드 챌린지 시즌3 | python  (0) 2022.05.06
코딩테스트 연습 | 로또의 최고 순위와 최저 순위 | 2021 Dev-Matching: 웹 백엔드 개발자(상반기) | Python  (0) 2022.05.04
코딩테스트 연습 | 신고 결과 받기 | 2022 KAKAO BLIND RECRUITMENT | Python  (0) 2022.05.03
코딩테스트 연습 | 신규 아이디 추천 | 2021 KAKAO BLIND RECRUITMENT | Python  (0) 2022.05.02
'👨‍💻 Dev Note/코딩테스트' 카테고리의 다른 글
  • 코딩테스트 연습 | 키패드 누르기 | 2020 카카오 인턴쉽 | python
  • 코딩테스트 연습 | 없는 숫자 더하기 | 월간 코드 챌린지 시즌3 | python
  • 코딩테스트 연습 | 로또의 최고 순위와 최저 순위 | 2021 Dev-Matching: 웹 백엔드 개발자(상반기) | Python
  • 코딩테스트 연습 | 신고 결과 받기 | 2022 KAKAO BLIND RECRUITMENT | Python
수피리
수피리
다양한 시도를 통해, 나만의 방식과 감각을 찾는 중
  • 수피리
    경험기록 아카이브
    수피리
  • 전체
    오늘
    어제
    • 분류 전체보기 (53)
      • 🌿 My Side B (10)
        • 🏕️ 캠핑 (1)
        • 🍜 맛집 탐방 (3)
        • ✍️ 블로그 전략 (3)
        • 🏋️‍♀️ 운동 (1)
        • 📖 기원 이야기 (2)
      • 📝 Tips (7)
        • 💻 Tech Tips (4)
        • ⚒️ Tool Tips (3)
        • 🧠 Life Tips (0)
      • 👨‍💻 Dev Note (36)
        • 알쓸신개 (0)
        • JavaScript (8)
        • TypeScript (5)
        • React (3)
        • 디자인패턴 (10)
        • Git (2)
        • Redis (1)
        • 코딩테스트 (7)
  • 인기 글

  • 최근 글

  • 태그

    TypeScript
    javascript
    코딩테스트
    designpatterns
    코딩테스트 연습
    designPattern
    자바스크립트
    타입스크립트
    Programming
    디자인패턴
  • hELLO· Designed By정상우.v4.10.3
수피리
코딩테스트 연습 | 숫자 문자열과 영단어 | 2021 카카오 채용연계형 인턴십 | python
상단으로

티스토리툴바