코딩테스트와 실무 역량 모두 잡는 알고리즘 스터디(Python반)에 참여한 내용을 정리했다.

2주차의 주제는 stack과 hash였다. stack에 관련한 기본적인 문제를 풀어보면서 자료구조의 특성을 다시 공부할 수 있어서 좋았다.

자물쇠와 열쇠

def rotate_90(key):
    n = len(key)
    new_key = [[0] * n for _ in range(n)]
    for i in range(n):
        for j in range(n):
            new_key[j][n - i - 1] = key[i][j]
    return new_key

unpacking에 대해 알게되었다. 언패킹은 괄호를 벗긴다고 생각하면된다.

return [list(reversed(i)) for i in zip(*key)]

방문 길이

엣지케이스 때문에 고생했다. (0,0)에서 (1,1)로 움직이는 경우와 (1,1)에서 (0,0)로 움직이는 경우를 같은 경로로 보고 체크해야하는데 한 방향만 넣었기 때문에 정확도 테스트에서 틀렸다.
그래서 처음에 생각한 방법은 양방향을 모두 넣는 무식한 방법이었는데

if (cx, cy, nx, ny) not in path and (nx, ny, cx, cy) not in path:

코드 리뷰를 통해 정렬을 이용한 효율적인 방식으로 리팩토링할 수 있었다. 정렬을 할 경우 항상 작은 값이 왼쪽으로 들어가기 때문에 방향을 신경 쓰지 않아도 된다.

check.add(tuple(sorted([position, next_position])))

짝지어 제거하기

# 코드 리뷰 전
 if stack:
        return 0
    return 1
    
# 코드 리뷰 후 
return int(stack == [])

0개의 댓글