Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
Tags
- 절삭평균
- 범주형자료
- 통계학입문
- 통계학개론
- 기본행연산
- 수학적확률
- jupyter notebook
- 모수
- 사조사
- Anaconda
- 이산확률질량함수
- 이항분포
- 조건부확률
- 행사다리꼴
- 이산형
- 표본평균
- pmf
- 누적분포함수
- 표본공간
- 연속확률변수
- 기댓값과 분산
- 포아송분포
- 이변량자료
- 균일분포
- 모평균
- 확률밀도함수
- 베르누이분포
- 수치형자료
- 피어슨상관계수
- 첨가행렬
Archives
- Today
- Total
Syeonny의 블로그
프로그래머스 lv.1 숫자 문자열과 영단어 본문
프로그래머스 lv1. 숫자 문자열과 영단어
문제
네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.
다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
- 1478 → "one4seveneight"
- 234567 → "23four5six7"
- 10203 → "1zerotwozero3"
이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ s의 길이 ≤ 50
- s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.
- return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.
입출력 예
"one4seveneight" | 1478 |
"23four5six7" | 234567 |
"2three45sixseven" | 234567 |
"123" | 123 |
제한시간 안내
- 정확성 테스트 : 10초
내 코드
def solution(s):
new = []
temp_str = ''
dic = {'zero':'0', 'one':'1', 'two':'2', 'three':'3', 'four':'4', 'five':'5',
'six':'6', 'seven':'7', 'eight':'8', 'nine':'9'}
for i in range(len(s)):
if s[i].isdigit():
new.append(s[i])
else:
temp_str += s[i]
if temp_str in dic:
new.append(dic[temp_str])
temp_str = ''
return int("".join(new))
최적화
def solution(s):
new = []
temp_str = ''
dic = {'zero':'0', 'one':'1', 'two':'2', 'three':'3', 'four':'4', 'five':'5',
'six':'6', 'seven':'7', 'eight':'8', 'nine':'9'}
for char in s: # 문자열 직접 순회
if char.isdigit(): # 숫자일 경우 바로 추가
new.append(char)
temp_str = "" # 숫자가 나오면 temp_str 초기화
else: # 문자인 경우 temp_str에 추가
temp_str += char
if temp_str in dic: # 단어가 완성되었을 때 변환
new.append(dic[temp_str])
temp_str = "" # 변환 후 초기화
return int("".join(new))
다른 사람 코드
num_dic = {"zero":"0", "one":"1", "two":"2", "three":"3", "four":"4", "five":"5", "six":"6", "seven":"7", "eight":"8", "nine":"9"}
def solution(s):
answer = s
for key, value in num_dic.items():
answer = answer.replace(key, value)
return int(answer)
딕셔너리를 사용해서 값을 순회함
def solution(s):
words = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
for i in range(len(words)):
s = s.replace(words[i], str(i))
return int(s)
replace(이전, 이후) 를 사용해서 문자와 숫자가 섞여있더라도 해당하는 부분만 알아서 수정됨
☆ 딕셔너리 / replace
'코딩테스트' 카테고리의 다른 글
프로그래머스 lv.1 완주하지 못한 선수 (0) | 2025.03.20 |
---|---|
프로그래머스 lv.1 폰켓몬 (1) | 2025.03.20 |
리스트에서 중복 제거하는 방법 (0) | 2025.03.17 |
프로그래머스 lv.1 가장 가까운 글자 (0) | 2025.03.04 |
프로그래머스 lv.1 시저암호 (0) | 2025.03.03 |