수 조작하기 1

장현웅·2024년 4월 5일

풀이

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'))

0개의 댓글