Python/알고리즘 문제 풀이

[코테] 숫자 문자열과 영단어

마이구미+ 2023. 5. 18. 14:54

<로직 고민>

  • 제일 먼저 든 생각은 딕셔너리를 활용해야겠다는 생각..ㅎㅎ...
  • 전에 숫자와 문자열이 섞인 문자열을 숫자로 바꾸라는 거였나 암튼 비슷한 문제 있었는데 그렇게 풀 수 있을 것 같았다
  • 입력값 s를 돌려서 int형으로 바뀌면 숫자니까 그대로 정답에 붙여주고 ValueError 뜨면 문자열이니까 한 단어씩 이어붙여서 딕셔너리 안에 있는 키 값과 일치하게 됐을 때 answer에 그 부분 딕셔너리의 밸류 값을 더해준다
  • 이런 식..

<완성된 코드>

def solution(s):
    answer, n = "", ""
    num_en = {"zero": 0,
              "one": 1,
              "two": 2,
              "three": 3,
              "four": 4,
              "five": 5,
              "six": 6,
              "seven": 7,
              "eight": 8,
              "nine": 9}
    for ss in s:
        try:
            int(ss)
            answer += ss
        except ValueError:
            n += ss
            if n in num_en.keys():
                answer += str(num_en[n])
                n = ""
    return int(answer)


print(solution("one4seveneight"))	# 1478
print(solution("23four5six7"))		# 234567
print(solution("2three45sixseven"))	# 234567
print(solution("123"))				# 123

<다른 사람 풀이>

- 천재풀이1

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)
  • 난 딕셔너리를 쓰면서...key()를 쓸 생각을 하면서 왜 items()는 생각하지 못 하는가...
  • 근데 어차피 replace도 생각 못 했어서
  • 이전에 다른 문제 풀 때 replace 생각했었는데....알고 있었는데...통탄스럽넹,,ㅋㅋ
  • 그나저나 answer 굳이 선언할 필요없이 s로 써도 될 거 같다
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):
    for key, value in num_dic.items():
        s = s.replace(key, value)
    return int(s)

- 천재풀이2

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)
  • 오 리스트와 인덱스로 ~

- 천재풀이3

def solution(s):
    numbers=['zero','one','two','three','four','five','six','seven','eight','nine']
    answer=""
    for idx, num in enumerate(numbers):
        if num in s:
            s = s.replace(num, str(idx))
        answer = s

    return int(answer)
  • 이건 리스트와 이뮤멀레이트의 조합이군