본문 바로가기
Programming Language/Python

[Python] dictionary / 프로그래머스 숫자 문자열과 영단어

by veggie-garden 2021. 10. 12.

Python에는 Dictionary 라는 자료형이 있다. 

 

dictionary = {key : value, key1 : value1}

 

위에 같은 구조로 이루어져 있는데, 마치 사전같이 영어 "hello"가 한국어로는 "안녕"인 것처럼, key라는 변수가 value라는 값을 가지는 것이다. 이런 형태를 연관 배열(Associative array)[각주:1] 또는 해시(Hash)[각주:2]라고 한다.[각주:3] 

 

사용하기

key는 마치 이름과도 같아서 변하지 않을 값을 사용해야 하지만 value의 값은 상관없다. 

 

dict = {1.2 : "float", 1 : "int", "abc" : "string", "num" : 123}

dict[1.2] = "float"
dict[1] = "int"
dict["abc"] = "string"
dict["num"] = 123

 

더 다양한 활용은 여길 참고하길 바란다. 

문제

이해를 위하여 문제를 들고 왔다. 프로그래머스의 "숫자 문자열과 영단어"라는 문제이다. 간단하게 설명하자면, s라는 입력이 들어오는데 그걸 result의 형식으로 변환시키는 함수를 작성하는 문제이다.

 

내가 생각한 문제 풀이 방식:

1. 숫자와 글자를 분리

2. 붙어 있는 글자끼리 분리

3. 분리한 글자를 숫자로 변환

4. 숫자들을 재조립해서 리턴

 

그리하여 나는 아래와 같이 풀었다. 코드가 길어 더보기를 클릭하여 보길 바란다.

더보기
def solution(s):
    answer = ""
    word = ""
    for i in s:
    	// 숫자와 문자를 분리
        if (i.isalpha()):
            word += i
		// 숫자들 조립하기
        else:
            answer += wordCnt(word)
            answer += i
            word = ""
    answer += wordCnt(word)
    return int(answer)

def wordCnt(word):
    answer = ""
    // 글자끼리 분리 및 숫자로 변환
    while word:
        if word[0:4] == "zero":
            answer += "0"
            s = word.find("o")
            word = word[s+1:]
        elif word[0:3] == "one":
            answer += "1"
            s = word.find("e")
            word = word[s+1:]
        elif word[0:3] == "two":
            answer += "2"
            s = word.find("o")
            word = word[s+1:]
        elif word[0:5] == "three":
            answer += "3"
            s = word.find("e")
            word = word[s+2:]
        elif word[0:4] == "four":
            answer += "4"
            s = word.find("r")
            word = word[s+1:]
        elif word[0:4] == "five":
            answer += "5"
            s = word.find("e")
            word = word[s+1:]
        elif word[0:3] == "six":
            answer += "6"
            s = word.find("x")
            word = word[s+1:]
        elif word[0:5] == "seven":
            answer += "7"
            s = word.find("n")
            word = word[s+1:]
        elif word[0:5] == "eight":
            answer += "8"
            s = word.find("t")
            word = word[s+1:]
        elif word[0:4] == "nine":
            answer += "9"
            s = word.find("e")
            word = word[s+1:]
    return answer

 

만약 dictoinary를 사용하지 않고 푼다면 코드가 이렇게 길어진다. 그러나 dictionary를 사용한다면 아래와 같이 아주 간단하게 풀 수 있다. 아래의 코드는 내가 짠 코드가 아니라 프로그래머스에서 제공하는 다른 사람의 풀이에서 가져왔다.

 

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)

 

 

코드를 짧게 풀어서 설명하자면 keyvalue라는 변수에 num_dic.items()라는 함수로 num_dickeyvalue를 담고 answer 안에 key 다 찾은 뒤 그걸 value로 변경하는 코드다. 

 

위에 내가 정리해둔 스텝들을 하나도 필요 없고, 그저 입력이 들어오면 변환해주면 되는 것이다. 훨씬 간결하고 이해하기 좋다. 

 


참조: 

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

 

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

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

programmers.co.kr

2. https://wikidocs.net/16

 

02-5 딕셔너리 자료형

[TOC] ## 딕셔너리란? 사람은 누구든지

wikidocs.net


 

댓글