티스토리 뷰

프로그래머스 문제 정복기

 

난이도 : Lv 1


🔗 Link


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

 

코딩테스트 연습 - 숫자 문자열과 영단어

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

programmers.co.kr

 

 

📑 Summary


 숫자와 문자로 된 숫자가 혼합된  문자열이 들어왔을 때, 모두 숫자 형태로 바꾸어 반환하는 문제이다.

 

🔑 How to solve? 


문제에서는 숫자와 문자로 된 숫자만 존재한다. 따라서 아래와 같이 생각을 쪼개 보자.

 

  1. 숫자는 그대로 반환한다.
  2. 문자는 숫자로 고쳐 반환한다. 

위의 조건대로 나누어 풀기 위해서는 숫자인지 판별하는 메서드가 필요하다. 다행히 파이썬은 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

 

 

 


포스팅에 문제가 있거나, 설명이 잘못된 부분 지적 환영합니다.

더 나은 퀄리티의 콘텐츠를 제공할 수 있도록 노력하겠습니다.

읽어주셔서 감사합니다. 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함