https://school.programmers.co.kr/learn/courses/30/lessons/160586
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
내 코드
# 대충 만든 자판
# 프로그래머스 https://school.programmers.co.kr/learn/courses/30/lessons/160586
def solution(keymap, targets):
""" 문제 분석
keymap 배열 주어지고 각 문자열들마다 번호가 매겨져 있다.
targets 배열은 입력해야할 문자열이다.
"""
keymap_dict = dict()
for i in range(len(keymap[0])):
if keymap[0][i] in keymap_dict:
continue
else:
keymap_dict[keymap[0][i]] = i
for i in range(1, len(keymap)):
for j in range(len(keymap[i])):
if keymap_dict.get(keymap[i][j]) is None:
keymap_dict[keymap[i][j]] = j
if keymap_dict[keymap[i][j]] > j:
keymap_dict[keymap[i][j]] = j
keymap_dict = dict_plus(keymap_dict)
cnt = 0
answer = []
for target in targets:
for i in range(len(target)):
if keymap_dict.get(target[i]) is None:
cnt = -1
break
cnt += keymap_dict[target[i]]
answer.append(cnt)
cnt = 0
return answer
def dict_plus(dict_parameter):
for key in dict_parameter:
dict_parameter[key] += 1
return dict_parameter
print(solution(["ABACD", "BCEFD"], ["ABCD","AABB"]))
print(solution(["AA"], ["B"]))
상대 코드
def solution(keymap, targets):
answer = []
hs = {}
for k in keymap:
for i, ch in enumerate(k):
hs[ch] = min(i + 1, hs[ch]) if ch in hs else i + 1
for i, t in enumerate(targets):
ret = 0
for ch in t:
if ch not in hs:
ret = - 1
break
ret += hs[ch]
answer.append(ret)
return answer
상대 코드를 보면서 enumerate에 대한 학습이 필요하다고 느껴졌다. 4번째줄(for k in ~) 부분에서 내가 작성한 코드보다 더 깔끔하면서 보기 쉽게 느껴진 것을 확인할 수 있었다.
8번째(for i, t in ~) 부분은 enumerate 학습을 하면 이해할 수 있을 것이라 판단된다.