[ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ] ๋ฉ€๋ฆฌ ๋›ฐ๊ธฐ / ๋™์  ๊ณ„ํš๋ฒ• ( Dynamic Programming )

๐Ÿง‘๐Ÿปโ€๐Ÿ’ป Coding Test/โŒจ๏ธ Programmers โ”ƒ 2024. 4. 11. 16:31
๋ชฉ์ฐจ
  1. ๋ฌธ์ œ ์„ค๋ช…
  2. ๋ฌธ์ œ ํ’€์ด
  3. ๋‚˜์˜ ํ’€์ด

 

 

 

 

 

 

๐Ÿ„ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œ ํ’€์ด

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

โœ๐Ÿป ๋ฌธ์ œ ํ’€์ด github ๋งํฌ

 

-Swift-CodingTest/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/2/12914.โ€…๋ฉ€๋ฆฌโ€…๋›ฐ๊ธฐ at main ยท BaeJihae/-Swift-CodingTest

Swift๋กœ ํ‘ผ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ๋ฌธ์ œ๋“ค์„ ์ •๋ฆฌํ•˜๊ณ  ๊ณต๋ถ€ํ•˜๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค. Contribute to BaeJihae/-Swift-CodingTest development by creating an account on GitHub.

github.com

 

 

๋ฌธ์ œ ์„ค๋ช…

ํšจ์ง„์ด๋Š” ๋ฉ€๋ฆฌ ๋›ฐ๊ธฐ๋ฅผ ์—ฐ์Šตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํšจ์ง„์ด๋Š” ํ•œ๋ฒˆ์— 1์นธ, ๋˜๋Š” 2์นธ์„ ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์นธ์ด ์ด 4๊ฐœ ์žˆ์„ ๋•Œ, ํšจ์ง„์ด๋Š”

(1์นธ, 1์นธ, 1์นธ, 1์นธ)

(1์นธ, 2์นธ, 1์นธ)

(1์นธ, 1์นธ, 2์นธ)

(2์นธ, 1์นธ, 1์นธ)

(2์นธ, 2์นธ)

์˜ 5๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋งจ ๋ ์นธ์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ€๋ฆฌ๋›ฐ๊ธฐ์— ์‚ฌ์šฉ๋  ์นธ์˜ ์ˆ˜ n์ด ์ฃผ์–ด์งˆ ๋•Œ, ํšจ์ง„์ด๊ฐ€ ๋์— ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋ช‡ ๊ฐ€์ง€์ธ์ง€ ์•Œ์•„๋‚ด, ์—ฌ๊ธฐ์— 1234567๋ฅผ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜, solution์„ ์™„์„ฑํ•˜์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด 4๊ฐ€ ์ž…๋ ฅ๋œ๋‹ค๋ฉด, 5๋ฅผ returnํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์ œํ•œ ์‚ฌํ•ญ

  • n์€ 1 ์ด์ƒ, 2000 ์ดํ•˜์ธ ์ •์ˆ˜์ž…๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ

n result
4 5
3 3

 

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

์œ„์—์„œ ์„ค๋ช…ํ•œ ๋‚ด์šฉ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

(2์นธ, 1์นธ)

(1์นธ, 2์นธ)

(1์นธ, 1์นธ, 1์นธ)

์ด 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฉ€๋ฆฌ ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

๋ฌธ์ œ ํ’€์ด

๋‚˜์˜ ํ’€์ด

 

์ฒซ ๋ฒˆ์งธ ํ’€์ด ( ์ •ํ™•์„ฑ : 31.3 % )


      
func solution(_ n:Int) -> Int {
var count = 0
var dividend = 0
var divisor = 0
for k in 0...n/2 {
if k == 0 || ( k % 2 == 0 ) && ( k == n/2 ) {
count += 1
}else {
let i = n - 2 * k
if i < k {
dividend = stride(from: n-k, to: k, by: -1).reduce(1) { $0 * ( $1 % 1234567 ) }
divisor = (1...i).reduce(1) { $0 * ( $1 % 1234567 ) }
}else {
dividend = stride(from: n-k, to: i, by: -1).reduce(1) { $0 * ( $1 % 1234567 ) }
divisor = (1...k).reduce(1) { $0 * ( $1 % 1234567 ) }
}
count += ( dividend / divisor ) % 1234567
}
}
return count % 1234567
}

 

์ฒซ ๋ฒˆ์งธ ํ’€์ด๋Š” ํ™•๋ฅ ๊ณผ ํ†ต๊ณ„์—์„œ์˜ "๊ฐ™์€ ๊ฒƒ์ด ์žˆ๋Š” ์ˆœ์—ด"์„ ํ†ตํ•ด ํ’€์–ด๋ณด๋ ค๊ณ  ํ–ˆ๋‹ค. ๋‚˜๋จธ์ง€ ์ •๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ’์„ ๊ณฑํ•  ๋•Œ๋งˆ๋‹ค 1234567๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•˜์˜€๋‹ค. ํ•˜์ง€๋งŒ, n์ด 2000์ด๋‚˜ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ป๊ฒŒ ํ’€๋“  Int์˜ ์ตœ๋Œ“๊ฐ’์„ ๋„˜๊ธธ ์ˆ˜ ๋ฐ–์— ์—†์—ˆ๋‹ค.

 

๋‘ ๋ฒˆ์งธ ํ’€์ด ( ์ •ํ™•์„ฑ : 37.5% )

 


      
func solution(_ n:Int) -> Int {
func sol(_ n: Int) -> Int {
switch n {
case 2:
return 2
case 1:
return 1
default:
return (sol(n-1)%1234567) + (sol(n-2)%1234567)
}
}
return sol(n) % 1234567
}

 

์—ฌ๋Ÿฌ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋ณด๋‹ค๋ณด๋‹ˆ ์ ํ™”์‹์ด ๋ณด์˜€๋‹ค. ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ํ†ตํ•˜์—ฌ ํ’€๋ ค๊ณ  ํ–ˆ์ง€๋งŒ, n์ด ์ตœ๋Œ“๊ฐ’์ด 2000์ด ๋œ๋‹ค๋ฉด, ์ตœ๋Œ€๋กœ ๋ฐ˜๋ณต๋˜๋Š” ๊ฐ’์€ 2์˜ 1998์Šน์ผ ๊ฒƒ์ด๋‹ค. ์‹œ๊ฐ„์ดˆ๊ณผ๋กœ ์ธํ•ด์„œ ์ด ๋ฐฉ๋ฒ•๋„ ํ‹€๋ฆฐ ๋ฐฉ๋ฒ•์ด์—ˆ๋‹ค. ํ•œ์ฐธ์„ ๊ณ ๋ฏผํ•ด๋ด๋„ ๋‹ต์ด ๋‚˜์˜ค์งˆ ์•Š์•„ ํŠœํ…จ๋‹˜์„ ์ฐพ์•„๊ฐ€ ํžŒํŠธ๋ฅผ ์–ป์–ด๋ณด์•˜๋‹ค.

 

์„ธ ๋ฒˆ์งธ ํ’€์ด ( ์ •๋‹ต! )

 


      
func solution(_ n:Int) -> Int {
if n == 1 {
return 1
}else if n == 2 {
return 2
}
var dp = [Int](repeating: 0, count: n)
dp[0] = 1
dp[1] = 2
for i in 2..<n {
dp[i] = ( dp[i-1] + dp[i-2] ) % 1234567
}
return dp[n-1] % 1234567
}

 

์ •๋‹ต์€ DP( dynamic Programming ) ์œผ๋กœ ํ‘ธ๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ๋‚ด๊ฐ€ ํ‘ผ ์žฌ๊ท€ํ•จ์ˆ˜์—์„œ์˜ ํ’€์ด๋ฅผ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๋ฉด, sol(8)์„ ์ด๋ฏธ ๊ณ„์‚ฐ์„ ํ–ˆ์Œ์—๋„ ๋‹ค์‹œ sol(8)์„ ๊ณ„์‚ฐํ•˜์—ฌ์•ผ ํ–ˆ๋‹ค. ๋ฐ˜๋ณต์ ์ธ ํ’€์ด๋ฅผ ๋ง‰๊ธฐ์œ„ํ•ด ์ด๋ฏธ ๊ณ„์‚ฐ๋œ ๊ฐ’์„ ๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค. ์‚ฌ์‹ค sol(8)์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด์„œ๋Š” ํฐ ์ˆ˜์—์„œ ์ž‘์€ ์ˆ˜๋กœ์˜ ๊ณ„์‚ฐ์ด ์•„๋‹Œ ์ž‘์€ ์ˆ˜์—์„œ ํฐ ์ˆ˜๋กœ ์ ํ™”์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ํ’€์–ด์•ผ ํ–ˆ๋‹ค.

 

๊ทธ ๊ณผ์ •์—์„œ ์ด์™€ ๊ฐ™์€ ํ’€์ด๊ฐ€ DP๋ฅผ ์ด์šฉํ•œ ํ’€์ด๋ฒ•์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. for๋ฌธ์— ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š” 1๊ณผ 2์˜ ๊ฐ’์€ if ๋ฌธ์œผ๋กœ ๋นผ๋‘๊ณ , ๋‚˜๋จธ์ง€๋Š” ์ ํ™”์‹์„ ์ด์šฉํ•˜์—ฌ ํ’€์—ˆ๋‹ค. ํ’€์ด๊ฐ€ ๊ต‰์žฅํžˆ ๊น”๋”ํ•˜๋ฉด์„œ ์—„์ฒญ ๋น ๋ฅธ ์†๋„๋กœ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

๋‹ค์Œ์—๋„ ๋™์ ๊ณ„ํš๋ฒ• ๋ฌธ์ œ๊ฐ€ ๋‚˜์˜จ๋‹ค๋ฉด ๋ฐ”๋กœ ํ’€ ์ˆ˜ ์žˆ๋„๋ก ๋™์ ๊ณ„ํš๋ฒ•(DP)์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด๋ณด์ž.

 

https://jihae-qu.tistory.com/entry/%EB%8B%A4%EC%9D%B4%EB%82%98%EB%AF%B9-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-Dynamic-Programming-%EB%8F%99%EC%A0%81-%EA%B3%84%ED%9A%8D%EB%B2%95

 

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ (Dynamic Programming) / ๋™์  ๊ณ„ํš๋ฒ•

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ( ๋™์  ๊ณ„ํš๋ฒ• ) ์ด๋ž€? ํ•œ ๋ฒˆ ์—ฐ์‚ฐ๋œ ๊ฐ’์„ ๋ฐ˜๋ณตํ•˜์—ฌ ์—ฐ์‚ฐํ•˜์ง€ ์•Š๋„๋ก ์ด๋ฏธ ์—ฐ์‚ฐ๋œ ๊ฐ’์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์˜ˆ : ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ

jihae-qu.tistory.com

 

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)
  1. ๋ฌธ์ œ ์„ค๋ช…
  2. ๋ฌธ์ œ ํ’€์ด
  3. ๋‚˜์˜ ํ’€์ด
'๐Ÿง‘๐Ÿปโ€๐Ÿ’ป Coding Test/โŒจ๏ธ Programmers' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ] ๊ด„ํ˜ธ ํšŒ์ „ํ•˜๊ธฐ
  • [ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ] ๊ทค ๊ณ ๋ฅด๊ธฐ
  • [ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ] N๊ฐœ์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜
  • [ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ] ์˜ˆ์ƒ ๋Œ€์ง„ํ‘œ
EarthSea
EarthSea
์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž ์งธ์ž…๋‹ˆ๋‹ค ๐ŸŒฑ

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๊ธ€์“ฐ๊ธฐ
EarthSea
EarthSea's Log๐ŸŒ
EarthSea

๊ณต์ง€์‚ฌํ•ญ

  • EarthSea's Introduce
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
    • โœ๏ธ TIL
    • ๐Ÿ“‘ Project
    • ๐Ÿ“’ Study
      • ๐ŸŒ React
      • ๐Ÿšฉ Swift
      • ๐Ÿ“ UIKit
      • ๐Ÿ–ค Git
      • ๐Ÿฉต Python
    • ๐Ÿง‘๐Ÿปโ€๐Ÿ’ป Coding Test
      • โŒจ๏ธ Programmers
      • ๐Ÿ–Œ๏ธ BAEKJOON
    • ๐ŸŽ† SSAFY
    • ๐ŸŽ Apple
    • ๐Ÿท๏ธ Tistory
    • ์˜ค๋กฏ์ด ๋‚˜์˜ ์‹œ๊ฐ„
Total
Today
Yesterday
hELLO ยท Designed By ์ •์ƒ์šฐ.v4.2.2
EarthSea
[ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ] ๋ฉ€๋ฆฌ ๋›ฐ๊ธฐ / ๋™์  ๊ณ„ํš๋ฒ• ( Dynamic Programming )
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.