
풀이
def solution(n, control):
for i in control:
if i == "w":
n += 1
elif i == "s":
n -= 1
elif i == "d":
n += 10
elif i == "a":
n -= 10
return n
다른 풀이 (딕셔너리: 직관적)
def solution(n, control):
answer = n
c = {'w':1, 's':-1, 'd':10, 'a':-10}
for i in control:
answer += c[i]
return answer
동작에 대한 값이 많거나 추가될 가능성이 있는 경우에는 딕셔너리를 사용하는 것이 좋은 것 같다.
다른 풀이 (zip)
def solution(n, control):
key = dict(zip(['w','s','d','a'], [1,-1,10,-10]))
return n + sum([key[c] for c in control])
zip()함수는 주어진 이터러블들(리스트, 튜플 등)에서 동일한 인덱스에 위치한 요소들을 묶어서 튜플의 리스트로 반환한다. 즉, [('w', 1), ('s', -1), ('d', 10), ('a', -10)]와 같이 묶인다. 후에 튜플들을 딕셔너리로 변환하여 {'w': 1, 's': -1, 'd': 10, 'a': -10}와 같이 된다. 두 코드 모두 선형 시간 복잡도를 갖고 가독성도 높지만 두 번째 코드가 한 줄에 더 많은 작업을 수행하므로 미미하지만 성능이 더 좋다.
list1 = [1, 2, 3]
list2 = ['a', 'b']
list3 = ['x', 'y', 'z']
zipped = zip(list1, list2, list3)
print(list(zipped)) # [(1, 'a', 'x'), (2, 'b', 'y')]
다른 풀이 (count)
def solution(n, control):
return n + 10*(control.count('d') - control.count('a')) + (control.count('w') - control.count('s'))