πŸ§‘πŸ»‍πŸ’» Coding Test/⌨️ Programmers

[ ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ ] ν”Όλ‘œλ„

EarthSea 2024. 4. 23. 23:46

 

 

πŸ„ ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ 문제 링크

 

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

μ½”λ“œ μ€‘μ‹¬μ˜ 개발자 μ±„μš©. μŠ€νƒ 기반의 ν¬μ§€μ…˜ λ§€μΉ­. ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€μ˜ 개발자 λ§žμΆ€ν˜• ν”„λ‘œν•„μ„ λ“±λ‘ν•˜κ³ , λ‚˜μ™€ 기술 ꢁ합이 잘 λ§žλŠ” 기업듀을 λ§€μΉ­ λ°›μœΌμ„Έμš”.

programmers.co.kr

✍🏻 λ¬Έμ œ 풀이 Github 링크

 

-Swift-CodingTest/ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€/2/87946.β€…ν”Όλ‘œλ„ at 2155d92b0146c5dcfbdbe857b92dd391a4c36f4b · BaeJihae/-Swift-CodingT

Swift둜 ν‘Ό μ½”λ”© ν…ŒμŠ€νŠΈ λ¬Έμ œλ“€μ„ μ •λ¦¬ν•˜κ³  κ³΅λΆ€ν•˜λŠ” κ³΅κ°„μž…λ‹ˆλ‹€. Contribute to BaeJihae/-Swift-CodingTest development by creating an account on GitHub.

github.com

 

 

문제 μ„€λͺ…

XXκ²Œμž„μ—λŠ” ν”Όλ‘œλ„ μ‹œμŠ€ν…œ(0 μ΄μƒμ˜ μ •μˆ˜λ‘œ ν‘œν˜„ν•©λ‹ˆλ‹€)이 있으며, 일정 ν”Όλ‘œλ„λ₯Ό μ‚¬μš©ν•΄μ„œ λ˜μ „μ„ νƒν—˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ, 각 λ˜μ „λ§ˆλ‹€ νƒν—˜μ„ μ‹œμž‘ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ "μ΅œμ†Œ ν•„μš” ν”Όλ‘œλ„"와 λ˜μ „ νƒν—˜μ„ λ§ˆμ³€μ„ λ•Œ μ†Œλͺ¨λ˜λŠ” "μ†Œλͺ¨ ν”Όλ‘œλ„"κ°€ μžˆμŠ΅λ‹ˆλ‹€. "μ΅œμ†Œ ν•„μš” ν”Όλ‘œλ„"λŠ” ν•΄λ‹Ή λ˜μ „μ„ νƒν—˜ν•˜κΈ° μœ„ν•΄ κ°€μ§€κ³  μžˆμ–΄μ•Ό ν•˜λŠ” μ΅œμ†Œν•œμ˜ ν”Όλ‘œλ„λ₯Ό λ‚˜νƒ€λ‚΄λ©°, "μ†Œλͺ¨ ν”Όλ‘œλ„"λŠ” λ˜μ „μ„ νƒν—˜ν•œ ν›„ μ†Œλͺ¨λ˜λŠ” ν”Όλ‘œλ„λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ "μ΅œμ†Œ ν•„μš” ν”Όλ‘œλ„"κ°€ 80, "μ†Œλͺ¨ ν”Όλ‘œλ„"κ°€ 20인 λ˜μ „μ„ νƒν—˜ν•˜κΈ° μœ„ν•΄μ„œλŠ” μœ μ €μ˜ ν˜„μž¬ 남은 ν”Όλ‘œλ„λŠ” 80 이상 이어야 ν•˜λ©°, λ˜μ „μ„ νƒν—˜ν•œ ν›„μ—λŠ” ν”Όλ‘œλ„ 20이 μ†Œλͺ¨λ©λ‹ˆλ‹€.

 

이 κ²Œμž„μ—λŠ” ν•˜λ£¨μ— ν•œ λ²ˆμ”© νƒν—˜ν•  수 μžˆλŠ” λ˜μ „μ΄ μ—¬λŸ¬κ°œ μžˆλŠ”λ°, ν•œ μœ μ €κ°€ 였늘 이 λ˜μ „λ“€μ„ μ΅œλŒ€ν•œ 많이 νƒν—˜ν•˜λ € ν•©λ‹ˆλ‹€. μœ μ €μ˜ ν˜„μž¬ ν”Όλ‘œλ„ k와 각 λ˜μ „λ³„ "μ΅œμ†Œ ν•„μš” ν”Όλ‘œλ„", "μ†Œλͺ¨ ν”Όλ‘œλ„"κ°€ λ‹΄κΈ΄ 2차원 λ°°μ—΄ dungeons κ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, μœ μ €κ°€ νƒν—˜ν• μˆ˜ μžˆλŠ” μ΅œλŒ€ λ˜μ „ 수λ₯Ό return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

 

 

 

μ œν•œμ‚¬ν•­

  • kλŠ” 1 이상 5,000 μ΄ν•˜μΈ μžμ—°μˆ˜μž…λ‹ˆλ‹€.
  • dungeons의 μ„Έλ‘œ(ν–‰) 길이(즉, λ˜μ „μ˜ 개수)λŠ” 1 이상 8 μ΄ν•˜μž…λ‹ˆλ‹€.
    • dungeons의 κ°€λ‘œ(μ—΄) κΈΈμ΄λŠ” 2 μž…λ‹ˆλ‹€.
    • dungeons의 각 행은 각 λ˜μ „μ˜ ["μ΅œμ†Œ ν•„μš” ν”Όλ‘œλ„", "μ†Œλͺ¨ ν”Όλ‘œλ„"] μž…λ‹ˆλ‹€.
    • "μ΅œμ†Œ ν•„μš” ν”Όλ‘œλ„"λŠ” 항상 "μ†Œλͺ¨ ν”Όλ‘œλ„"보닀 ν¬κ±°λ‚˜ κ°™μŠ΅λ‹ˆλ‹€.
    • "μ΅œμ†Œ ν•„μš” ν”Όλ‘œλ„"와 "μ†Œλͺ¨ ν”Όλ‘œλ„"λŠ” 1 이상 1,000 μ΄ν•˜μΈ μžμ—°μˆ˜μž…λ‹ˆλ‹€.
    • μ„œλ‘œ λ‹€λ₯Έ λ˜μ „μ˜ ["μ΅œμ†Œ ν•„μš” ν”Όλ‘œλ„", "μ†Œλͺ¨ ν”Όλ‘œλ„"]κ°€ μ„œλ‘œ 같을 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

 

μž…μΆœλ ₯ 예

k dungeons result
80 [[80,20],[50,40],[30,10]] 3

 

 

 

문제 풀이

 

λ‚˜μ˜ 풀이

 

μ΄ν‹€λ™μ•ˆ 머리λ₯Ό μ‹Έλ§ΈλŠ”λ° λͺ»ν’€μ—ˆμŠ΅λ‹ˆλ‹€!

μˆœμ—΄λ‘œ ν•΄λ‹Ή 배열을 νƒμƒ‰ν•΄μ•Όν•˜λŠ” 것도, μž¬κ·€ν•¨μˆ˜λ‘œ ν’€μ–΄μ•Όν•œλ‹€λŠ” 것도 μ•Œμ•˜λŠ”λ°, λ‘œμ§κ΅¬ν˜„μ΄ 제 μ†μœΌλ‘œ 되질 μ•Šμ•˜μ–΄μš”..!

κ·Έλž˜μ„œ ν•œμ°Έμ„ κ³ λ―Όν•˜λ‹€ 닡을 보기둜 ν–ˆμŠ΅λ‹ˆλ‹€!

λͺ¨λ“  경우의 수λ₯Ό μ†μœΌλ‘œ λ‹€ κ·Έλ €λ³Έ 후에야 이해가 λ˜μ—ˆμ–΄μš”!

내일 아침에 μΌμ–΄λ‚˜μžλ§ˆμž 이 문제λ₯Ό ν’€μ–΄μ•Ό κ² λ‹€λŠ” 생각을 ν–ˆμŠ΅λ‹ˆλ‹€!

 

 

λ‹€λ₯Έ μ‚¬λžŒ 풀이

import Foundation

func solution(_ k:Int, _ dungeons:[[Int]]) -> Int {

    var answer = 0
    var check = [Bool](repeating: false, count: dungeons.count)
    
    func dfs(now: Int, depth: Int) {
        
        answer = max(depth, answer)
        
        for i in 0..<dungeons.count {
            if !check[i] && now >= dungeons[i][0]{
                check[i] = true
                dfs(now: now - dungeons[i][1], depth: depth+1 )
                check[i] = false
            }
        }
    }
    
    dfs(now: k, depth: 0)
    return answer
}

 

checkλŠ” ν•΄λ‹Ή μΈλ±μŠ€κ°€ 순회λ₯Ό λŒμ•˜λŠ”μ§€λ₯Ό νŒŒμ•…ν•˜λŠ” λ°°μ—΄μž…λ‹ˆλ‹€.

answer은 κ°€μž₯ 깊게 κΉŒμ§€ νƒμƒ‰ν•œ 경우λ₯Ό μ €μž₯ν•˜κΈ° λ•Œλ¬Έμ— λ‹΅κ³Ό κ°™μŠ΅λ‹ˆλ‹€.

μž¬κ·€ν•¨μˆ˜λ₯Ό ν†΅ν•΄μ„œ λͺ¨λ“  경우λ₯Ό 탐색할 수 μžˆλ„λ‘ μ™„μ „ νƒμƒ‰μœΌλ‘œ λ“€μ–΄κ°”μŠ΅λ‹ˆλ‹€.