Skip to content

Latest commit

 

History

History
110 lines (80 loc) · 3.85 KB

File metadata and controls

110 lines (80 loc) · 3.85 KB

코드 리뷰 가이드

리뷰 목적

코드 리뷰의 목적은 작성자를 평가하는 것이 아니라 다음을 함께 찾는 것입니다.

  • 정답을 깨뜨릴 수 있는 조건
  • 더 명확한 코드 표현
  • 제한 시간에 맞는 알고리즘
  • 다음 문제에도 적용할 수 있는 개념

리뷰 순서

1. 문제와 풀이 설명 읽기

코드부터 보기 전에 PR의 핵심 접근과 복잡도를 읽습니다.

확인할 질문:

  • 설명과 실제 구현이 일치하는가?
  • 선택한 알고리즘이 입력 크기에 적합한가?
  • 작성자가 특히 고민한 부분은 무엇인가?

2. 정답성과 예외 처리

  • 최소·최대 입력을 처리하는가?
  • 인덱스 범위를 벗어날 수 있는가?
  • 중복 방문이나 무한 반복 가능성이 있는가?
  • 문제 조건을 일부 빠뜨리지 않았는가?
  • 입력이 하나뿐이거나 답이 없는 경우를 처리하는가?

3. 시간·공간 복잡도

  • 반복문의 실제 중첩 횟수는 얼마인가?
  • 루프 내부의 in, 슬라이싱, 정렬 비용을 놓치지 않았는가?
  • 배열 전체 복사를 반복하고 있지 않은가?
  • list.pop(0) 대신 deque.popleft()가 필요한가?
  • 방문 배열, set, dict 중 더 적합한 자료구조가 있는가?

4. 가독성과 Python 활용

  • 변수명에서 역할을 알 수 있는가?
  • 좌표의 x/yrow/col이 일관적인가?
  • 함수가 하나의 역할만 담당하는가?
  • 너무 깊은 중첩을 조기 종료나 함수 분리로 줄일 수 있는가?
  • 주석이 코드의 동작보다 선택 이유를 설명하는가?
  • Python 내장 함수가 오히려 이해를 어렵게 만들지는 않는가?

5. 대안 비교

대안 풀이를 제안할 때는 현재 풀이보다 무조건 좋다고 말하지 않고 비교합니다.

현재 풀이는 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 처리했습니다.