코드 리뷰의 목적은 작성자를 평가하는 것이 아니라 다음을 함께 찾는 것입니다.
- 정답을 깨뜨릴 수 있는 조건
- 더 명확한 코드 표현
- 제한 시간에 맞는 알고리즘
- 다음 문제에도 적용할 수 있는 개념
코드부터 보기 전에 PR의 핵심 접근과 복잡도를 읽습니다.
확인할 질문:
- 설명과 실제 구현이 일치하는가?
- 선택한 알고리즘이 입력 크기에 적합한가?
- 작성자가 특히 고민한 부분은 무엇인가?
- 최소·최대 입력을 처리하는가?
- 인덱스 범위를 벗어날 수 있는가?
- 중복 방문이나 무한 반복 가능성이 있는가?
- 문제 조건을 일부 빠뜨리지 않았는가?
- 입력이 하나뿐이거나 답이 없는 경우를 처리하는가?
- 반복문의 실제 중첩 횟수는 얼마인가?
- 루프 내부의
in, 슬라이싱, 정렬 비용을 놓치지 않았는가? - 배열 전체 복사를 반복하고 있지 않은가?
list.pop(0)대신deque.popleft()가 필요한가?- 방문 배열, set, dict 중 더 적합한 자료구조가 있는가?
- 변수명에서 역할을 알 수 있는가?
- 좌표의
x/y와row/col이 일관적인가? - 함수가 하나의 역할만 담당하는가?
- 너무 깊은 중첩을 조기 종료나 함수 분리로 줄일 수 있는가?
- 주석이 코드의 동작보다 선택 이유를 설명하는가?
- Python 내장 함수가 오히려 이해를 어렵게 만들지는 않는가?
대안 풀이를 제안할 때는 현재 풀이보다 무조건 좋다고 말하지 않고 비교합니다.
현재 풀이는 O(N^2)이고 추가 자료구조가 필요하지 않습니다.
set을 사용하면 존재 확인은 명확해지지만 메모리가 더 필요합니다.
| 표기 | 사용 시점 | 병합 전 반영 |
|---|---|---|
[MUST] |
오답, 범위 오류, 심각한 성능 문제 | 필수 |
[SUGGEST] |
구조·가독성·효율 개선 | 선택 또는 논의 |
[QUESTION] |
의도와 근거 확인 | 답변 권장 |
[GOOD] |
잘한 구현과 배울 점 | 해당 없음 |
[NOTE] |
참고 지식과 추가 학습 내용 | 해당 없음 |
[MUST] `ny == N`인 경우에도 배열에 접근할 수 있어 IndexError가 발생합니다.
배열 접근 전에 `0 <= ny < N` 검사가 필요합니다.
[SUGGEST] BFS 큐에서 `pop(0)`은 원소 이동 때문에 O(N)입니다.
`collections.deque`와 `popleft()`를 사용하면 O(1)로 처리할 수 있습니다.
[QUESTION] 여기서 배열 전체를 복사한 이유가 재귀 호출 간 상태 분리를 위한 것인가요?
변경한 위치만 복구하는 방식과 비교했을 때 어떤 장단점을 고려했는지 궁금합니다.
[GOOD] 네 방향 로직을 방향 배열 하나로 통합해 중복을 줄였고, 회전 조건도 한 곳에서 관리한 점이 좋습니다.
이거 이상한데요.
그냥 제 코드처럼 하세요.
변수명이 별로예요.
문제와 근거가 드러나도록 바꿉니다.
[SUGGEST] `a`, `b`는 이 함수 안에서 각각 현재 좌표와 다음 좌표를 뜻하는 것으로 보입니다.
`current`, `next_position`처럼 역할이 드러나는 이름이면 이동 로직을 따라가기 쉬울 것 같습니다.
- 좋은 점을 최소 한 가지 작성했습니다.
- 오류를 지적했다면 재현 조건이나 이유를 함께 작성했습니다.
- 취향과 필수 수정을 구분했습니다.
- 작성자의 질문에 답했습니다.
- 해결된 대화는 Resolve 처리했습니다.