๐Ÿง‘๐Ÿป‍๐Ÿ’ป Coding Test/โŒจ๏ธ Programmers

[ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ] ์—ฐ์† ๋ถ€๋ถ„ ์ˆ˜์—ด ํ•ฉ์˜ ๊ฐœ์ˆ˜

EarthSea 2024. 4. 14. 12:57

 

 

 

 

 

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

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

 

๋ฌธ์ œ ์„ค๋ช…

์ฒ ํ˜ธ๋Š” ์ˆ˜์—ด์„ ๊ฐ€์ง€๊ณ  ๋†€๊ธฐ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋А ๋‚  ์ฒ ํ˜ธ๋Š” ์–ด๋–ค ์ž์—ฐ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์›ํ˜• ์ˆ˜์—ด์˜ ์—ฐ์†ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆ˜๊ฐ€ ๋ชจ๋‘ ๋ช‡ ๊ฐ€์ง€์ธ์ง€ ์•Œ์•„๋ณด๊ณ  ์‹ถ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์›ํ˜• ์ˆ˜์—ด์ด๋ž€ ์ผ๋ฐ˜์ ์ธ ์ˆ˜์—ด์—์„œ ์ฒ˜์Œ๊ณผ ๋์ด ์—ฐ๊ฒฐ๋œ ํ˜•ํƒœ์˜ ์ˆ˜์—ด์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ˆ˜์—ด [7, 9, 1, 1, 4] ๋กœ ์›ํ˜• ์ˆ˜์—ด์„ ๋งŒ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

 

์›ํ˜• ์ˆ˜์—ด์€ ์ฒ˜์Œ๊ณผ ๋์ด ์—ฐ๊ฒฐ๋˜์–ด ๋Š๊ธฐ๋Š” ๋ถ€๋ถ„์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์—ฐ์†ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด๋„ ์ผ๋ฐ˜์ ์ธ ์ˆ˜์—ด๋ณด๋‹ค ๋งŽ์•„์ง‘๋‹ˆ๋‹ค.

์›ํ˜• ์ˆ˜์—ด์˜ ๋ชจ๋“  ์›์†Œ elements๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์›ํ˜• ์ˆ˜์—ด์˜ ์—ฐ์† ๋ถ€๋ถ„ ์ˆ˜์—ด ํ•ฉ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

 

์ œํ•œ์‚ฌํ•ญ

  • 3 ≤ elements์˜ ๊ธธ์ด ≤ 1,000
  • 1 ≤ elements์˜ ์›์†Œ ≤ 1,000

 

์ž…์ถœ๋ ฅ ์˜ˆ

elements result
[7,9,1,1,4] 18

 

 

 

๋ฌธ์ œ ํ’€์ด

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

import Foundation

func solution(_ elements:[Int]) -> Int {
    
    var sumElements = [Int]()
    
    for num in 0..<elements.count {
        var some = 0
        for i in 0..<elements.count-1 {
            some += elements[(num + i)%elements.count]
            sumElements.append(some)
        }
    }
    sumElements.append(elements.reduce(0){$0 + $1})
    
    return Set(sumElements).count
}

5๊ฐœ์˜ ์ˆซ์ž๋กœ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ๋Œ๋ ค๋ณด๋‹ˆ 5๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋ชจ๋‘ ํ•ฉํ•˜๋Š” ๊ฒƒ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ์ž๊ธฐ ์ž์‹ ์„ ๊ธฐ์ค€์œผ๋กœ 1, (1,2), (1,2,3), (1,2,3,4) ๋กœ ๋”ํ•ด์ง€๋ฉด, for๋ฌธ์„ ๋‘ ๋ฒˆ๋งŒ ๋Œ๋ฆฌ๊ณ  ๋๋‚ผ ์ˆ˜ ์žˆ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐ์„ ํ–ˆ๋‹ค. ๋Œ๋ฆฌ๋Š” ์ค‘์˜ ๋ฐ˜๋ณต๋˜๋Š” ๊ฐ’์€ ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ  ๋งˆ์ง€๋ง‰์— Set์œผ๋กœ ์ค‘๋ณต๊ฐ’์„ ๋นผ์ฃผ์–ด์•ผ ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐ์„ ํ–ˆ๋‹ค. ์›ํ˜•์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž๊ธฐ ์ž์‹ ์„ ๊ธฐ์ค€์œผ๋กœ 3๋ฒˆ์งธ ๋’ค์˜ ์ˆ˜๋Š” 4๋ฒˆ์งธ ๋’ค์˜ ์ˆ˜๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋„๋ก ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ๋งˆ์ง€๋ง‰์—” 5๊ฐœ๋ฅผ ๋ชจ๋‘ ๋”ํ•ด์ฃผ๋Š” ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.

์œ„์˜ ๊ฒฝ์šฐ๋ฅผ n๊ฐœ์˜ ์ˆ˜๋กœ ์ผ๋ฐ˜ํ™”ํ•˜์—ฌ ํ’€์—ˆ๋”๋‹ˆ ํ•œ๋ฒˆ์— ํ’€๋ ธ๋‹ค! ๋„ˆ๋ฌด ๊ธฐ๋ถ„ ์ข‹๊ณ !

 

 

๋‹ค๋ฅธ ์‚ฌ๋žŒ ํ’€์ด

import Foundation

func solution(_ elements:[Int]) -> Int {
    var answer = Set<Int>()

    func dfs(_ now: Int, _ num: Int, _ count: Int) {
        answer.insert(num)
        if elements.count == count { return }

        for i in now..<now+1 {
            dfs((i + 1) % elements.count, num + elements[i % elements.count], count + 1)
        }
    }

    for i in 0..<elements.count {
        dfs((i + 1) % elements.count , elements[i], 1)
    }

    return answer.count
}

 

dfs ๋ฌธ์ œ๋กœ๋„ ํ’€ ์ˆ˜ ์žˆ๊ตฌ๋‚˜?!

dfs ๋ž€? ๊นŠ์ด์šฐ์„ ํƒ์ƒ‰ ( depth First Search )์˜ ์ค„์ž„๋ง๋กœ, ๋‹ค์Œ branch๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์— ํ•ด๋‹น branch๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

dfs์— ๋Œ€ํ•œ ๋กœ์ง์„ ๊ตฌํ˜„ํ•ด๋ณธ์ ์ด ์—†์–ด์„œ ์ด๋ฒˆ์—๋Š” ๋ˆˆ์œผ๋กœ๋งŒ ์ตํ˜€๋ดค๋Š”๋ฐ, ์ œ๋Œ€๋กœ ๊ฐœ๋… ๊ณต๋ถ€ํ•ด์„œ dfs ๊ด€๋ จ ๋ฌธ์ œ๋“ค์„ ๊ผญ ํ’€์–ด๋ด์•ผ๊ฒ ๋‹ค๋ผ๋Š” ์ƒ๊ฐ์„ ํ–ˆ๋‹ค.