Skip to content

suyeon/05#48

Merged
seonghyeon0312 merged 1 commit into
ssafy-gumi-4-algorithm-study:mainfrom
l-suyeon-l:suyeon/05
Mar 20, 2026
Merged

suyeon/05#48
seonghyeon0312 merged 1 commit into
ssafy-gumi-4-algorithm-study:mainfrom
l-suyeon-l:suyeon/05

Conversation

@l-suyeon-l

Copy link
Copy Markdown
Collaborator

No description provided.

@seonghyeon0312

Copy link
Copy Markdown
Contributor

@claude 현재 파일 변경 사항 체크해서 코드 리뷰하고 코멘트로 달아줘

@claude

claude Bot commented Mar 7, 2026

Copy link
Copy Markdown

🔍 코드 리뷰 - BOJ_11053_suyeon.java

✅ 잘한 점

  • BufferedReader + StringTokenizer 조합으로 입출력 성능을 잘 챙겼어요!
  • O(N²) DP 접근법을 깔끔하게 구현했고, 전체 코드가 간결하게 잘 정리되어 있습니다.
  • resMax를 별도로 관리해 매번 배열을 순회하지 않고 최댓값을 추적한 점도 좋습니다.

⏱ 시간복잡도 / 공간복잡도

  • 시간복잡도: O(N²) — 각 원소마다 이전 원소를 모두 순회
  • 공간복잡도: O(N) — A[], memo[] 배열 사용
  • N ≤ 1000 제약 조건에서 O(N²)는 충분히 통과 가능합니다 👍

🐛 로직 오류 / 엣지케이스

else if (A[j] == A[i]) 분기가 불필요합니다.

이 분기는 결과에 영향을 주지 않지만, 의미적으로 혼란을 줄 수 있는 코드입니다.

else if(A[j] == A[i])
    max = Math.max(max, memo[j]);  // ← 이 분기, 실제로 필요할까요?

왜 불필요한가:

  • A[j] == A[i]일 때 memo[j] = k라면, A[j] 이전에 A[j]보다 작은 원소 A[m]이 반드시 존재하고 memo[m] ≥ k-1입니다.
  • j 이후에 m을 순회할 때 A[m] < A[i] 조건에서 max ≥ memo[m]+1 ≥ k를 이미 얻게 됩니다.
  • 즉, else if 분기의 결과는 항상 정규 분기(A[j] < A[i])에 의해 덮어씌워지거나 동일합니다.

결론적으로 오답을 내지는 않지만, 읽는 사람 입장에서 "등호일 때 왜 memo[j]를 쓰지?"라는 의문이 생깁니다. 제거해도 무방합니다.


💡 개선 제안

  • O(N log N) 풀이 도전해보기: 이분탐색(Binary Search)을 활용하면 LIS를 O(N log N)에 구할 수 있습니다. memo 배열 대신 현재까지 구성한 증가 수열의 끝 원소들을 별도 배열에 유지하면서 Arrays.binarySearch를 사용하는 방식을 고민해보세요!
  • 클래스 필드를 public static으로 전부 선언하는 방식은 경쟁 프로그래밍에서는 흔하지만, 로컬 변수로 처리할 수 있는 것들은 main 안으로 넣으면 가독성이 올라갑니다.

🎨 코드 품질

  • resMax 변수명은 직관적이고 좋습니다.
  • memo는 DP 배열의 관용적 표현으로 무난합니다. dp로 바꾸면 더 일반적인 네이밍이 될 수 있어요.
  • 불필요한 else if 분기만 제거하면 코드 가독성이 한층 올라갈 것 같습니다.

🏁 최종 판정

  • Approve
  • 사유: 로직 오류 없이 O(N²) DP를 올바르게 구현했습니다. else if 분기는 결과에 영향을 주지 않는 불필요한 코드이므로 스타일 개선 제안으로 남깁니다. O(N log N) 풀이도 도전해보면 좋을 것 같아요! 🎉

@seonghyeon0312 seonghyeon0312 merged commit 3b4564b into ssafy-gumi-4-algorithm-study:main Mar 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants