Skip to content

[okyungjin] WEEK 02 solutions#2683

Open
okyungjin wants to merge 5 commits into
DaleStudy:mainfrom
okyungjin:main
Open

[okyungjin] WEEK 02 solutions#2683
okyungjin wants to merge 5 commits into
DaleStudy:mainfrom
okyungjin:main

Conversation

@okyungjin

@okyungjin okyungjin commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

답안 제출 문제

작성자 체크 리스트

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

검토자 체크 리스트

Important

본인 답안 제출 뿐만 아니라 다른 분 PR 하나 이상을 반드시 검토를 해주셔야 합니다!

  • 바로 이전에 올라온 PR에 본인을 코드 리뷰어로 추가해주세요.
  • 본인이 검토해야하는 PR의 답안 코드에 피드백을 주세요.
  • 토요일 전까지 PR을 병합할 수 있도록 승인해주세요.

@dalestudy

dalestudy Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

📊 okyungjin 님의 학습 현황

이번 주 제출 문제

문제 난이도 유형 분석
climbing-stairs Easy ✅ 의도한 유형
product-of-array-except-self Medium ✅ 의도한 유형
valid-anagram Easy ✅ 의도한 유형

누적 학습 요약

  • 풀이한 문제: 5 / 75개
  • 이번 주 유형 일치율: 100% (3문제 중 3문제 일치)

문제 풀이 현황

카테고리 진행도 완료
Heap ■■□□□□□ 1 / 3 (Medium 1)
Array ■□□□□□□ 2 / 10 (Easy 2)
Graph ■□□□□□□ 1 / 8 (Medium 1)
Dynamic Programming ■□□□□□□ 1 / 11 (Medium 1)
Binary □□□□□□□ 0 / 5 ← 아직 시작 안 함
Interval □□□□□□□ 0 / 5 ← 아직 시작 안 함
Linked List □□□□□□□ 0 / 6 ← 아직 시작 안 함
Matrix □□□□□□□ 0 / 4 ← 아직 시작 안 함
String □□□□□□□ 0 / 10 ← 아직 시작 안 함
Tree □□□□□□□ 0 / 14 ← 아직 시작 안 함

🤖 이 댓글은 GitHub App을 통해 자동으로 작성되었습니다.

🔢 API 사용량 (gpt-5-nano)
요청 입력 토큰 출력 토큰 합계 비용
1 483 37 520 $0.000039
2 934 102 1,036 $0.000088
3 1,500 111 1,611 $0.000119
4 1,604 129 1,733 $0.000132
합계 4,521 379 4,900 $0.000378

@github-actions github-actions Bot added the py label Jun 29, 2026
@okyungjin okyungjin changed the title 242. Valid Anagram [okyungjin] WEEK 02 solutions Jun 29, 2026
@dahyeong-yun dahyeong-yun self-requested a review June 29, 2026 13:23
Comment on lines +20 to +22
curr = prev2 + prev1 # 현재 계단
prev2 = prev1
prev1 = curr

@dahyeong-yun dahyeong-yun Jul 4, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggested change
curr = prev2 + prev1 # 현재 계단
prev2 = prev1
prev1 = curr
prev2, prev1 = prev1, prev2 + prev1

파이썬이니까 동시 할당을 활용하는 방법도 있을 것 같아요.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

감사합니다! 개인적으로 curr로 작성해주는게 가독성이 더 좋다고 생각해서 풀어서 작성했습니다.

prev2 = 1 # 전전칸 까지의 경우의 수
prev1 = 2 # 전칸 까지의 경우의 수

for _ in range(2, n):

@dahyeong-yun dahyeong-yun Jul 4, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

개인적으로는 3번째 계단에서 시작하는 거면, 3이라고 명시하는 걸 더 선호해서요. 이렇게도 쓸 수 있을 것 같아요.

Suggested change
for _ in range(2, n):
for _ in range(3, n+1):

Comment on lines +21 to +32
if len(s) != len(t):
return False

counter = Counter(s)

for char in t:
if counter[char] >= 1:
counter[char] -= 1
else:
return False

return True

@dahyeong-yun dahyeong-yun Jul 4, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Counter 라는 것은 처음 보는데 아주 편리하게 쓸 수 있네요. 어차피 Counter 객체를 쓴다면 비교 연산으로 더 간단히 표현이 가능한 것 같아요. 찾아보니 Counter가 내부적으로 각 문자의 등장 횟 수를 dict 타입으로 반환하고, dict 타입은 == 연산자로 동일 비교가 가능하네요.

Suggested change
if len(s) != len(t):
return False
counter = Counter(s)
for char in t:
if counter[char] >= 1:
counter[char] -= 1
else:
return False
return True
# s가 "apple" 일 때, Counter({'p': 2, 'a': 1, 'l': 1, 'e': 1})
return Counter(s) == Counter(t)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

@dahyeong-yun 오오 이런 방법도 있네요. 파이썬은 == 으로 비교하면 참조가 아니라 값으로 비교하는 특성이 있군요. 감사합니다 ㅎㅎ!!

@okyungjin

Copy link
Copy Markdown
Contributor Author

238. Product of Array Except Self

AI의 도움을 받아 prefix, suffix 이해를 돕는 그림을 그렸습니다.

image

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🏷️ 알고리즘 패턴 분석

  • 패턴: Dynamic Programming
  • 설명: 피보나치-like 점화식을 이용해 연속한 부분문제의 해를 합산하는 DP 패턴으로, 각 계단 수를 이전 두 값의 합으로 계산하며 공간을 상수로 유지합니다.

📊 시간/공간 복잡도 분석

복잡도
Time O(n)
Space O(1)

피드백: 연산은 n-2까지 한 번의 반복으로 따질 수 있도록 prev1, prev2를 유지한다. 상수 공간으로 풀이 가능하다.

개선 제안: 현재 구현이 적절해 보입니다.

💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🏷️ 알고리즘 패턴 분석

  • 패턴: Two Pointers, Dynamic Programming, Hash Map / Hash Set, Greedy, Divide and Conquer, Monotonic Stack, Binary Search, Trie, Bit Manipulation, Heap / Priority Queue, BFS, DFS, Union Find, Backtracking
  • 설명: 주어진 solution은 왼쪽-누적 곱(prefix)과 오른쪽-누적 곱(suffix)을 이용해 각 위치의 곱을 구하는 방식으로 O(N) 시간과 상수 외 추가 공간으로 계산합니다. 결과적으로 배열 각 원소를 제외한 곱을 구하는 최적 패턴으로, 공간 절약을 위해 중간 저장 없이 합성하는 아이디어가 핵심입니다.

📊 시간/공간 복잡도 분석

복잡도
Time O(n)
Space O(1)

피드백: 두 패스 수행으로 각 원소의 왼쪽과 오른쪽 곱을 결합한다. 추가 배열 없이도 가능하지만 출력 배열이 필요하다.

개선 제안: 현재 구현이 적절해 보입니다.

💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🏷️ 알고리즘 패턴 분석

  • 패턴: Hash Map / Hash Set, Dynamic Programming
  • 설명: 해당 코드는 문자 빈도를 해시 맵(Counter)로 세고 비교하는 방식으로 애너그램 여부를 판별한다. 두 문자열의 문자 분포를 비교하는 것이 핵심이며, 필요 시 한쪽에서 차감을 통해 확인하는 방식도 사용된다.

📊 시간/공간 복잡도 분석

ℹ️ 이 파일에는 2가지 풀이가 포함되어 있어 각각 분석합니다.

풀이 1: Solution01 — Time: O(n) / Space: O(1)
복잡도
Time O(n)
Space O(1)

피드백: Counter 기반으로 초기화와 차감 단계로 애너그램 여부를 판단한다. 길이가 다르면 빠르게 걸러진다.

개선 제안: 현재 구현이 적절해 보입니다.

풀이 2: Solution — Time: O(n) / Space: O(1)
복잡도
Time O(n)
Space O(1)

피드백: Counter 객체를 사용해 두 문자열의 빈도수를 바로 비교한다.

개선 제안: 현재 구현이 적절해 보입니다.

💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!

answer[j] *= suffix
suffix *= nums[j]

return answer

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

깔끔한 풀이네요 👍🏼

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

시간이 얼마 안 남아서 남은 것들 후딱 풀겠습니다. 늦은 시간인데도 확인해주셔서 감사해요ㅠㅠ!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

Status: Solving

Development

Successfully merging this pull request may close these issues.

2 participants