Skip to content

Conversation

forest000014
Copy link
Contributor

@forest000014 forest000014 commented Dec 13, 2024

답안 제출 문제

체크 리스트

  • 우측 메뉴에서 PR을 Projects에 추가해주세요.
  • Projects의 오른쪽 버튼(▼)을 눌러 확장한 뒤, Week를 현재 주차로 설정해주세요.
  • 바로 앞에 PR을 열어주신 분을 코드 검토자로 지정해주세요.
  • 문제를 모두 푸시면 프로젝트에서 StatusIn Review로 설정해주세요.
  • 코드 검토자 1분 이상으로부터 승인을 받으셨다면 PR을 병합해주세요.

@forest000014 forest000014 requested a review from a team as a code owner December 13, 2024 03:32
@github-actions github-actions bot added the java label Dec 13, 2024
@forest000014 forest000014 requested a review from bus710 December 13, 2024 03:33
@forest000014
Copy link
Contributor Author

마지막에 개행 문자를 넣지 않아서 CI가 실패한 것인지... 이따가 퇴근하고 나서 확인해보겠습니다.

@TonyKim9401
Copy link
Contributor

TonyKim9401 commented Dec 13, 2024

현재로서는 개행 문자가 입력되지 않아 CI가 실패하는것으로 보입니다! 추가 후 재시도 부탁드립니다!
이후로도 문제가 발생한다면 아래의 링크를 확인해 주세요!
#664 (comment)

@forest000014 forest000014 changed the title Contains Duplicate [forest000014] Week 1 Dec 13, 2024
@forest000014
Copy link
Contributor Author

House Robber 문제의 공간 복잡도를 개선했는데 오히려 memory usage는 높게 나오는 현상이 있었는데요
검색을 좀 해보니, leetcode의 (runtime과) memory usage는 믿을만한 게 못되니, 직접 공간 복잡도를 계산해보라고 하네요 😑

@forest000014
Copy link
Contributor Author

CI 실패는 개행 문자 추가로 해결했습니다.
@TonyKim9401 감사합니다 :)

@obzva
Copy link
Contributor

obzva commented Dec 13, 2024

@forest000014 크 첫 주차에 최적화까지 진행해보셨군요 :-)
네 맞습니다, 리트코드의 런타임/메모리 백분위는 같은 솔루션이더라도 제출마다 다르게 측정되는 등 일관적이지 않습니다 (어느 정도 경향성은 있다고 생각합니다)
알고리즘 문제 풀이에서 실제 메모리 사용량과 실행 시간을 따지는 경우는 드문 것 같아요, 시공간복잡도를 분석하는 연습에 좀 더 초점을 둬보시죠 ㅎㅎ

Comment on lines +2 to +15
/*
[1, i]의 범위에서 최대값을 구하고자 할 때, 만약 [1, i-1]의 범위에서의 최대값을 이미 계산해 놓았다면 O(1)에 계산할 수 있다는 아이디어에서 출발합니다.
단, 연속해서 두 집에서 훔칠 수 없다는 전제조건이 있으므로, i-1번째 집에서 훔친 경우와 훔치지 않는 경우 각각에 대한 최대값을 따로 구해두어야 합니다.
dp[i-1][0]에는 i-1번째 집에서 훔치지 않는 경우의 최대값, dp[i-1][1]에는 i-1번째 집에서 훔친 경우의 최대값이 저장되어 있다는 전제하에,
dp[i][0], dp[i][1]을 아래와 같이 구할 수 있습니다.

1) i번째 집에서 훔치지 않는 경우의 [1, i] 범위에서의 최대값
i번째 집에서는 훔치지 않을 것이므로, [1, i-1] 범위에서의 최대값이 dp[i][0]이 됩니다.
단, 여기서 주의할 점은 dp[i-1][1]이 무조건 dp[i-1][0] 이상이라고 착각할 수 있다는 건데요,
{100, 1, 1, 100} 에서 dp[1][0] = 100, dp[1][1] = 1 이라는 케이스를 생각해보면, dp[i-1][0], dp[i-1][1]를 비교해서 큰 것을 선택해야 함을 알 수 있습니다.

2) i번째 집에서 훔치는 경우의 [1, i] 범위에서의 최대값
i번째 집에서 훔치기 위해서는, i-1번째 집에서는 훔치지 않았어야만 합니다.
따라서 단순히 dp[i][1] = dp[i-1][0] + nums[i] 가 됩니다.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

점화식 도출 과정을 자세히 적어주신 것 아주 훌륭한 것 같습니다

sol 1. 재귀 호출

알고리즘 문제를 오랜만에 풀어서... union-find를 떠올리긴 했으나, 구현 방법이 가물가물해서 원하는 솔루션으로 풀지 못한 것 같습니다.
일단 vis, cnt 와 재귀 호출을 사용해서 union-find와 유사하게 구현하긴 했는데요 (해설을 달면서 다시 보니 이것도 union-find를 구현하는 한 방법이라고 할 수 있을듯...?),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아이디어 떠올리고 끝까지 구현하는 능력이 좋으신 것 같아요 ㅎㅎ
다만 vis, cnt 및 재귀호출 스택 등의 추가적인 공간 사용을 줄일 방법이 있을 것 같습니다
나중에 시간 되시면 한 번 더 살펴보셔도 좋을 것 같아요


class Solution {
public boolean isPalindrome(String s) {
for (int i = 0, j = s.length() - 1; i < j; i++, j--) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

사소함)
for 문 안에다가 i, j를 한 번에 이용하다 보니까 for 문 body의 로직이 가독성이 좀 더 떨어지는 것 같아요
좀 더 일반적인 코드처럼 while로 했으면 어떨까 하는 생각이 듭니다 ㅎㅎ

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이런 식으로 for문 안에 조건문과 증감식을 한번에 써 놓으면 왠지 nerd미가 더 느껴지는 것 같아서 습관이 들었었네요 ㅎㅎ 말씀을 듣고 보니 다른 사람과 함께 보기에는 가독성이 좀 떨어지는 것 같습니다. 다음 문제부터는 가독성도 함께 고려하면서 작성해보겠습니다! :)

Copy link
Contributor

@obzva obzva left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

한 주 고생하셨습니다! 집요함과 꼼꼼함이 보이는 풀이였습니다 :)

@bus710
Copy link
Contributor

bus710 commented Dec 13, 2024

정성스런 코멘트가 코트 리뷰에 많은 도움이 되었습니다.

@forest000014 forest000014 merged commit 4c1dd3e into DaleStudy:main Dec 14, 2024
1 check passed
@forest000014 forest000014 changed the title [forest000014] Week 1 [forest000014] Week 01 Feb 6, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
No open projects
Status: Completed
Development

Successfully merging this pull request may close these issues.

4 participants