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)
코드를 짧게 풀어서 설명하자면 key
와 value
라는 변수에 num_dic.items()
라는 함수로 num_dic
의 key
와 value
를 담고 answer
안에 key
다 찾은 뒤 그걸 value
로 변경하는 코드다.
위에 내가 정리해둔 스텝들을 하나도 필요 없고, 그저 입력이 들어오면 변환해주면 되는 것이다. 훨씬 간결하고 이해하기 좋다.
참조:
1. https://programmers.co.kr/learn/courses/30/lessons/81301
'Programming Language > Python' 카테고리의 다른 글
[Python] input과 sys.stdin.readline의 차이 (2) | 2021.12.10 |
---|---|
[Python] 삼항 연산자 (0) | 2021.10.22 |
[Python] 사칙연산 연산자 (0) | 2021.10.22 |
[Python] for in 반복문 (for in, range, enumerate) (0) | 2021.09.19 |
[Python] 배열 (0) | 2021.09.03 |
댓글