티스토리 뷰
프로그래머스 문제 정복기
난이도 : Lv 1
🔗 Link
https://programmers.co.kr/learn/courses/30/lessons/81301
코딩테스트 연습 - 숫자 문자열과 영단어
네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자
programmers.co.kr
📑 Summary
숫자와 문자로 된 숫자가 혼합된 문자열이 들어왔을 때, 모두 숫자 형태로 바꾸어 반환하는 문제이다.
🔑 How to solve?
문제에서는 숫자와 문자로 된 숫자만 존재한다. 따라서 아래와 같이 생각을 쪼개 보자.
- 숫자는 그대로 반환한다.
- 문자는 숫자로 고쳐 반환한다.
위의 조건대로 나누어 풀기 위해서는 숫자인지 판별하는 메서드가 필요하다. 다행히 파이썬은 isdigit()라는 함수를 지원한다. 해당 함수를 통해 각 문자가 숫자인지 문자인지 판단할 수 있다.
##위 생략
# 인덱스를 맞추기 위해 -1 부터 시작
i =-1
while i+1 < len(s):
i += 1
# 숫자가 발생하면 그전까지의 값을 전환
if s[i].isdigit():
## 아래 생략
해당 메서드를 이용하여 숫자는 처리할 수 있게 되었으니, 문자를 숫자로 어떻게 바꿀지 생각해보자. 숫자마다 단어의 수가 달라서 어떻게 풀지 좀 난해할 수도 있을 것 같다. 심지어 연속으로 문자로 된 숫자가 나올 수 있으니, 초보자라면, 더욱 까다로웠을 수 있을 것 같다.
먼저 dictionary형태로 0~9까지의 문자로된 단어를 정리하자. 그리고 단어가 들어온다면 시작부터 글자를 늘려나가며, dictionary에 해당 값이 있는지 확인한다. 연속된 문자라면, 첫 글자를 찾고, 시작 인덱스를 옮겨서 연속적으로 찾아 나가면 된다.
def transNum(words):
dic = {"zero":"0","one":"1","two":"2","three":"3","four":"4",
"five":"5","six":"6","seven":"7","eight":"8","nine":"9"}
#결과 반환용
res =""
#첫 글자 인덱스용
idx =0
for i in range(2,len(words)+1) :
word = words[idx:i]
#문자가 존재한다면
if words[idx:i] in dic :
#결과값에 숫자로 반환함
res += dic[words[idx:i]]
#시작 인덱스를 변경
idx = i
return res
마지막으로 문제에서는 정수 형태를 원하기 때문에 정수형으로 바꿔준다면 쉽게 풀 수 있다.
💡 Code
# Link
# https://programmers.co.kr/learn/courses/30/lessons/81301
def solution(s):
answer = ""
start =0
i = -1
while i+1 < len(s):
i += 1
# 숫자가 발생하면 그전까지의 값을 전환
if s[i].isdigit():
answer+=transNum(s[start:i])
answer+= s[i]
start = i+1
if len(answer) !=len(s):
answer += transNum(s[start:i+1])
return int(answer)
#단어를 숫자형태로
def transNum(words):
dic = {"zero":"0","one":"1","two":"2","three":"3","four":"4",
"five":"5","six":"6","seven":"7","eight":"8","nine":"9"}
res =""
idx =0
for i in range(2,len(words)+1) :
word = words[idx:i]
if words[idx:i] in dic :
res += dic[words[idx:i]]
idx = i
return res
포스팅에 문제가 있거나, 설명이 잘못된 부분 지적 환영합니다.
더 나은 퀄리티의 콘텐츠를 제공할 수 있도록 노력하겠습니다.
읽어주셔서 감사합니다.
'공부 > 코딩 테스트 준비' 카테고리의 다른 글
[프로그래머스] 가장 큰 정사각형 찾기- Python (효율성이 원인이라면) (0) | 2022.01.08 |
---|---|
[프로그래머스] 매칭 점수 - JAVA (실패 CASE 포함) (0) | 2021.12.25 |
[프로그래머스] 키패드 누르기 - Python (0) | 2021.12.21 |
[프로그래머스] 추석트래픽 - JAVA (0) | 2021.12.17 |
[프로그래머스] 모의고사 - Python (0) | 2021.12.14 |
- Total
- Today
- Yesterday
- Spring
- 유클리드-호제법
- 아기상어나쁜상어
- 실패일기
- 하루 회고
- 9019
- Database
- 플루이드 와샬
- 그래프 탐색
- 재귀
- dml
- value annotation
- looker core
- 자바
- 백준
- DP
- 코딩테스트
- db
- BFS
- 아기상어미워
- 프로그래머스
- 카카오
- DFS
- looker instance 접속
- 프로그래머스 문제정복
- 브루트포스
- 파이썬
- java
- JNDI연동
- Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |