티스토리 뷰
참고
https://www.acmicpc.net/problem/1991
트리 순회를 스택을 이용한 반복문으로 구현하던 중 ','를 이용한 동시 할당에서 발생했던 문제점과 해결과정을 기록한다.
문제점
def iter_inorder(tree, node):
stack = [node]
while stack:
while tree[node] and tree[node][0] != '.':
# tree[node][0], node = '.', tree[node][0] # 1
node, tree[node][0] = tree[node][0], '.' # 2
stack.append(node)
node = stack.pop()
print(node, end='')
if tree[node] and tree[node][1] != '.':
node = tree[node][1]
stack.append(node)
기존에는 ','를 사용한 동시 할당에 좌측 변수의 순서는 상관 없다고 생각 하였으나 검색 결과 변수 순서가 할당 순서에 영향을 줄 수도 있다는 것을 알게 되었다.
실제 주석 1번이 올바르게 동작하고 주석 2번이 오답을 출력한다.
해결과정
주석 1번의 변수 할당 과정을 풀어쓰면 아래와 같다.
temp = tree[node][0]
tree[node][0] = '.'
node = temp
내가 의도한 바 처럼 잘 동작한다.
주석 2번의 변수 할당 과정을 풀어쓰면 아래와 같다.
temp = node
node = tree[node][0]
tree[node][0] = '.'
temp[node][0] = '.' 에서 이미 node가 참조하는 값이 변경되었기 때문에 의도한대로 동작하지 않는다. 실제로 잘 동작하도록 풀어쓰면 아래와 같을 것이다.
temp = node
node = tree[node][0]
tree[temp][0] = '.'
일반적인 a, b = b, a와 같은 동시할당에서는 문제가 발생하지 않겠지만
위 같이 한 변수가 다른 변수의 key 값 혹인 인덱스 값일 경우에는 의도한 대로 동작하지 않을 수 있다.
728x90
'Python' 카테고리의 다른 글
[Python] urllib.request를 활용한 다운로드 (0) | 2020.03.04 |
---|
댓글