Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

15-avocado-13 #71

Merged
merged 1 commit into from
Feb 21, 2024
Merged

15-avocado-13 #71

merged 1 commit into from
Feb 21, 2024

Conversation

avocado-13
Copy link
Member

@avocado-13 avocado-13 commented Feb 19, 2024

πŸ”— 문제 링크

λ°±μ€€ | 1둜 λ§Œλ“€κΈ°

βœ”οΈ μ†Œμš”λœ μ‹œκ°„

1μ‹œκ°„ (λ¬Έμ œν‘ΈλŠ” 데 30λΆ„, 해섀보고 μ΄ν•΄ν•˜λŠ” 데 30λΆ„)

✨ μˆ˜λ„ μ½”λ“œ

λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°, ν•œκ΅­μ–΄λ‘œ 동적 κ³„νšλ²•μ€ 상ν–₯식가 ν•˜ν–₯식이 μžˆλŠ”λ°, 상ν–₯식(bottom up)은 제일 μž‘μ€ 인덱슀의 μˆ˜λΆ€ν„° λͺ©ν‘œν•˜λŠ” κ°’μœΌλ‘œ ν–₯ν•˜λŠ” 것이고, ν•˜ν–₯식은 맨 μœ„μ˜ κ°’μ—μ„œ μž¬κ·€λ‘œ 제일 μž‘μ€ 인덱슀λ₯Ό ν–₯ν•˜λŠ” 것이닀.

μ—°μ‚°μ˜ μ΅œμ†Ÿκ°’μ„ ꡬ해야 ν•˜λ―€λ‘œ λ‹¨μˆœνžˆ 큰 수둜 λ‚˜λˆ„κΈ°λ§Œ ν•˜λŠ” 것이 정닡이라 생각할 수 μžˆμœΌλ‚˜, 10의 κ²½μš°μ—λŠ” 10 - 5- 4- 2- 1둜 ν‘ΈλŠ” 방법보닀, μ²˜μŒλΆ€ν„° 1을 λΉΌκ³  10 -9 -3 -1을 λ§Œλ“œλŠ” 방법이 μ΅œμ†Ÿκ°’μ΄λ‹€.

  1. 리슀트 d λ₯Ό μƒμ„±ν•˜μ—¬, d[i] μ—λŠ” 수 iλ₯Ό 1둜 λ§Œλ“€κΈ° μœ„ν•΄ ν•„μš”ν•œ μ—°μ‚°μ˜ μ΅œμ†Ÿκ°’μ„ μ €μž₯ν•œλ‹€.
  2. Bottom-up λ°©μ‹μœΌλ‘œ μ ‘κ·Όν•˜μ—¬ μž‘μ€ μˆ«μžλΆ€ν„° μ‹œμž‘ν•˜μ—¬ 순차적으둜 큰 μˆ«μžκΉŒμ§€ dλ₯Ό μ±„μš΄λ‹€.
  3. 각 숫자 i에 λŒ€ν•΄ λ‹€μŒ μ„Έ 가지 경우 μ€‘μ—μ„œ μ΅œμ†Ÿκ°’μ„ μ°Ύμ•„ d[i] 에 μ €μž₯ν•œλ‹€.
    1. 1을 λΊ„ 경우 : d[i-1] + 1
    2. 2둜 λ‚˜λˆŒ 경우 : d[i//2] + 1
    3. 3으둜 λ‚˜λˆŒ 경우 : d[i//3] + 1
  • d[i] = d[i-1] + 1 : ν˜„μž¬ μˆ˜μ—μ„œ 1을 λΉΌλŠ” 경우λ₯Ό κ³ λ €. κ·ΈλŸ¬λ―€λ‘œ 이전 κ°’μ—μ„œ 1을 λ”ν•œ 값이 ν˜„μž¬μ˜ μ—°μ‚° νšŸμˆ˜κ°€ λœλ‹€.
  • d[i] = min(d[i], d[i//3] +1) : ν˜„μž¬ 수λ₯Ό 3으둜 λ‚˜λˆ„λŠ” 경우λ₯Ό κ³ λ €. ν˜„μž¬μ˜ μ—°μ‚° νšŸμˆ˜μ™€ ν˜„μž¬ 수λ₯Ό 3으둜 λ‚˜λˆˆ 수의 μ—°μ‚°νšŸμˆ˜μ— 1을 λ”ν•œ κ°’ μ€‘μ—μ„œ 더 μž‘μ€ 값을 μ„ νƒν•œλ‹€.
  • d[i] = min(d[i],d[i//2] +1) : ν˜„μž¬ 수λ₯Ό 2둜 λ‚˜λˆ„λŠ” 경우λ₯Ό κ³ λ €. ν˜„μž¬μ˜ μ—°μ‚° νšŸμˆ˜μ™€ ν˜„μž¬ 수λ₯Ό 2둜 λ‚˜λˆˆ 수의 μ—°μ‚°νšŸμˆ˜μ— 1을 λ”ν•œ κ°’ μ€‘μ—μ„œ 더 μž‘μ€ 값을 μ„ νƒν•œλ‹€.

이런 λ°©μ‹μœΌλ‘œ μ—°μ‚° 횟수의 μ΅œμ†Ÿκ°’μ„ κ³„μ‚°ν•˜μ—¬ 좜λ ₯.

μ΅œμ’… μ½”λ“œ

n = int(input())
d = [0] * (n + 1)	## d에 κ³„μ‚°λœ 값을 μ €μž₯ν•΄λ‘”λ‹€. n + 1이라고 ν•œ μ΄μœ λŠ”, 1번째 μˆ˜λŠ” 사싀 d[1]이 μ•„λ‹ˆκ³  d[2]이기 λ•Œλ¬Έμ—, κ³„μ‚°ν•˜κΈ° νŽΈν•˜κ²Œ d[1]을 1번째 인 것 처럼 λ§Œλ“€μ–΄μ€€λ‹€.

for i in range(2, n + 1):

    d[i] = d[i - 1] + 1
    if i % 3 == 0:
        d[i] = min(d[i], d[i // 3] + 1)	
    if i % 2 == 0:
        d[i] = min(d[i], d[i // 2] + 1)
print(d[n])

πŸ“š μƒˆλ‘­κ²Œ μ•Œκ²Œλœ λ‚΄μš©

λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°μ˜ κ°œλ…μ„ 읡히고 호기둭게 문제λ₯Ό ν’€μ–΄λ΄€λŠ”λ°, 해섀을 보고도 μ΄ν•΄ν•˜λŠ” 데 어렀움을 κ²ͺμ–΄ 아직 많이 λΆ€μ‘±ν•˜λ‹€λŠ” 것을 λŠκΌˆλ‹€. πŸ₯² μ’€ 더 κ³΅λΆ€ν•΄μ„œ μ΅μˆ™ν•΄μ Έμ•Ό κ² λ‹€. :]

ν•΄μ„€ 링크

Comment on lines +4 to +11
for i in range(2, n + 1):

d[i] = d[i - 1] + 1
if i % 3 == 0:
d[i] = min(d[i], d[i // 3] + 1)
if i % 2 == 0:
d[i] = min(d[i], d[i // 2] + 1)
print(d[n])
Copy link
Collaborator

Choose a reason for hiding this comment

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

저도 μ‹œν˜„λ‹˜κ³Ό 같은 νλ¦„μœΌλ‘œ 해결을 ν–ˆλ„€μš” γ…Žγ…Ž

n = int(input())
dp = [0] * (10**6+1) 

for i in range(2,n+1):
    # 1을 i번 λΉΌλŠ” 경우의 μˆ˜λž‘
    dp[i] = dp[i-1] + 1
    # 2의 배수면 2둜 λ‚˜λˆ„λŠ” 경우의 μˆ˜μ™€ λΉ„κ΅ν•΄μ„œ 적은 κ°’
    if not i%2:
        dp[i] = min(dp[i], dp[i//2]+1)
    # 3의 배수면 3으둜 λ‚˜λˆ„λŠ” 경우의 μˆ˜μ™€ λΉ„κ΅ν•΄μ„œ 적은 κ°’
    if not i%3:
        dp[i] = min(dp[i], dp[i//3]+1)
print(dp[n])

μ²˜μŒμ— i-1의 1둜 λͺ¨λ‘ λΉΌμ£ΌλŠ” 경우의 μˆ˜μ™€ ν•˜λ‚˜μ˜ 쀄 μ•ˆμ—μ„œ 비ꡐλ₯Ό ν•˜λ €λ‹€ μ‹€νŒ¨ν–ˆλŠ”λ°
λ‹€λ₯Έ μ‚¬λžŒλ“€μ˜ μ½”λ“œλ₯Ό 보며 μ–΄λ–»κ²Œ κ΅¬ν˜„ν•΄μ•Όν• μ§€λ₯Ό μ•Œκ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€ :)

2λ‚˜ 3으둜 λ‚˜λˆ μ§€λŠ” μ΅œμ†Œ νšŸμˆ˜μ— 숫자둜 λ‚˜λˆˆ λ‚˜λ¨Έμ§€ 만큼 (2 or 3) 1을 λΉΌμ€˜μ•Όν•˜λŠ” 경우의 수λ₯Ό μΆ”κ°€ν•œ 것을
ν•œκΊΌλ²ˆμ— λΉ„κ΅ν•˜μ—¬ μ΅œμ†Ÿκ°’μ„ 찾아쀄 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€ ✨

for i in range(2,N+1):
    dp[i] = min(dp[i-1]+1, dp[i//2]+1 + i%2, dp[i//3]+1 + i%3)
print(A[N])

Copy link
Member Author

@avocado-13 avocado-13 Feb 20, 2024

Choose a reason for hiding this comment

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

μš°μ™€ 2의 λ°°μˆ˜μΈμ§€ μ•„λ‹Œμ§€ ν™•μΈν•˜λŠ” 쑰건을 if not i%2 둜 μ λŠ” 것은 처음 λ΄€μ–΄μš” (βœΏβ—•β€Ώβ—•βœΏ) ν•œκΊΌλ²ˆμ— κ΅¬ν•˜λŠ” 것도 ... bb

@tgyuuAn tgyuuAn removed the request for review from Hwangyerin February 20, 2024 10:22
Copy link
Member

@janghw0126 janghw0126 left a comment

Choose a reason for hiding this comment

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

λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°μ€ 맀번 봐도 쉽지 μ•Šμ€ λ¬Έμ œλ„€μš”..😭
3μ‹œκ°„μ„ λΆ™μž‘λ‹€κ°€ λ„μ €νžˆ μ•ˆλ  것 κ°™μ•„μ„œ μ‹œν˜„λ‹˜μ˜ μˆ˜λ„ μ½”λ“œμ™€ μ •μ€λ‹˜μ˜ 리뷰λ₯Ό 보며 따라해 λ³΄μ•˜μŠ΅λ‹ˆλ‹€πŸ€”

2λ‚˜ 3으둜 λ‚˜λˆ μ§€λŠ” μ΅œμ†Œ νšŸμˆ˜μ— 숫자둜 λ‚˜λˆˆ λ‚˜λ¨Έμ§€ 만큼 1을 λΉΌμ€˜μ•Ό ν•˜λŠ” 경우의 수λ₯Ό μΆ”κ°€ν•œ 것을 ν•œκΊΌλ²ˆμ— λΉ„κ΅ν•˜μ—¬ μ΅œμ†Ÿκ°’μ„ μ°Ύμ•„μ£ΌλŠ” 것도 쒋은 아이디어 κ°™μŠ΅λ‹ˆλ‹€πŸ‘

이번 PR도 정말정말 μˆ˜κ³ ν•˜μ…¨μŠ΅λ‹ˆλ‹€ μ‹œν˜„λ‹˜!

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

Successfully merging this pull request may close these issues.

3 participants