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

[ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ] ์‹คํŒจ์œจ

EarthSea 2024. 3. 24. 23:16

 

 

 

๐Ÿ„ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ

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

โœ๐Ÿป Github

๋ฌธ์ œ ํ’€์ด github ๋งํฌ

 

 

๋ฌธ์ œ ์„ค๋ช…

์Šˆํผ ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์ž ์˜ค๋ ๋ฆฌ๋Š” ํฐ ๊ณ ๋ฏผ์— ๋น ์กŒ๋‹ค. ๊ทธ๋…€๊ฐ€ ๋งŒ๋“  ํ”„๋žœ์ฆˆ ์˜ค์ฒœ์„ฑ์ด ๋Œ€์„ฑ๊ณต์„ ๊ฑฐ๋’€์ง€๋งŒ, ์š”์ฆ˜ ์‹ ๊ทœ ์‚ฌ์šฉ์ž์˜ ์ˆ˜๊ฐ€ ๊ธ‰๊ฐํ•œ ๊ฒƒ์ด๋‹ค. ์›์ธ์€ ์‹ ๊ทœ ์‚ฌ์šฉ์ž์™€ ๊ธฐ์กด ์‚ฌ์šฉ์ž ์‚ฌ์ด์— ์Šคํ…Œ์ด์ง€ ์ฐจ์ด๊ฐ€ ๋„ˆ๋ฌด ํฐ ๊ฒƒ์ด ๋ฌธ์ œ์˜€๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ• ๊นŒ ๊ณ ๋ฏผ ํ•œ ๊ทธ๋…€๋Š” ๋™์ ์œผ๋กœ ๊ฒŒ์ž„ ์‹œ๊ฐ„์„ ๋Š˜๋ ค์„œ ๋‚œ์ด๋„๋ฅผ ์กฐ์ ˆํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ์—ญ์‹œ ์Šˆํผ ๊ฐœ๋ฐœ์ž๋ผ ๋Œ€๋ถ€๋ถ„์˜ ๋กœ์ง์€ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ–ˆ์ง€๋งŒ, ์‹คํŒจ์œจ์„ ๊ตฌํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ์œ„๊ธฐ์— ๋น ์ง€๊ณ  ๋ง์•˜๋‹ค. ์˜ค๋ ๋ฆฌ๋ฅผ ์œ„ํ•ด ์‹คํŒจ์œจ์„ ๊ตฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์™„์„ฑํ•˜๋ผ.

  • ์‹คํŒจ์œจ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜ํ•œ๋‹ค.
    • ์Šคํ…Œ์ด์ง€์— ๋„๋‹ฌํ–ˆ์œผ๋‚˜ ์•„์ง ํด๋ฆฌ์–ดํ•˜์ง€ ๋ชปํ•œ ํ”Œ๋ ˆ์ด์–ด์˜ ์ˆ˜ / ์Šคํ…Œ์ด์ง€์— ๋„๋‹ฌํ•œ ํ”Œ๋ ˆ์ด์–ด ์ˆ˜

์ „์ฒด ์Šคํ…Œ์ด์ง€์˜ ๊ฐœ์ˆ˜ N, ๊ฒŒ์ž„์„ ์ด์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ˜„์žฌ ๋ฉˆ์ถฐ์žˆ๋Š” ์Šคํ…Œ์ด์ง€์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด stages๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์‹คํŒจ์œจ์ด ๋†’์€ ์Šคํ…Œ์ด์ง€๋ถ€ํ„ฐ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์Šคํ…Œ์ด์ง€์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ด๊ฒจ์žˆ๋Š” ๋ฐฐ์—ด์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜๋ผ.

 

์ œํ•œ์‚ฌํ•ญ

  • ์Šคํ…Œ์ด์ง€์˜ ๊ฐœ์ˆ˜ N์€ 1 ์ด์ƒ 500 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค.
  • stages์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 200,000 ์ดํ•˜์ด๋‹ค.
  • stages์—๋Š” 1 ์ด์ƒ N + 1 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜๊ฐ€ ๋‹ด๊ฒจ์žˆ๋‹ค.
    • ๊ฐ ์ž์—ฐ์ˆ˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ˜„์žฌ ๋„์ „ ์ค‘์ธ ์Šคํ…Œ์ด์ง€์˜ ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
    • ๋‹จ, N + 1 ์€ ๋งˆ์ง€๋ง‰ ์Šคํ…Œ์ด์ง€(N ๋ฒˆ์งธ ์Šคํ…Œ์ด์ง€) ๊นŒ์ง€ ํด๋ฆฌ์–ด ํ•œ ์‚ฌ์šฉ์ž๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ๋งŒ์•ฝ ์‹คํŒจ์œจ์ด ๊ฐ™์€ ์Šคํ…Œ์ด์ง€๊ฐ€ ์žˆ๋‹ค๋ฉด ์ž‘์€ ๋ฒˆํ˜ธ์˜ ์Šคํ…Œ์ด์ง€๊ฐ€ ๋จผ์ € ์˜ค๋„๋ก ํ•˜๋ฉด ๋œ๋‹ค.
  • ์Šคํ…Œ์ด์ง€์— ๋„๋‹ฌํ•œ ์œ ์ €๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์Šคํ…Œ์ด์ง€์˜ ์‹คํŒจ์œจ์€ 0 ์œผ๋กœ ์ •์˜ํ•œ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ

N stages result
5 [2, 1, 2, 6, 2, 4, 3, 3] [3,4,2,1,5]
4 [4,4,4,4,4] [4,1,2,3]

 

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

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

1๋ฒˆ ์Šคํ…Œ์ด์ง€์—๋Š” ์ด 8๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋„์ „ํ–ˆ์œผ๋ฉฐ, ์ด ์ค‘ 1๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์•„์ง ํด๋ฆฌ์–ดํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ๋”ฐ๋ผ์„œ 1๋ฒˆ ์Šคํ…Œ์ด์ง€์˜ ์‹คํŒจ์œจ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • 1 ๋ฒˆ ์Šคํ…Œ์ด์ง€ ์‹คํŒจ์œจ : 1/8

2๋ฒˆ ์Šคํ…Œ์ด์ง€์—๋Š” ์ด 7๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋„์ „ํ–ˆ์œผ๋ฉฐ, ์ด ์ค‘ 3๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์•„์ง ํด๋ฆฌ์–ดํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ๋”ฐ๋ผ์„œ 2๋ฒˆ ์Šคํ…Œ์ด์ง€์˜ ์‹คํŒจ์œจ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • 2 ๋ฒˆ ์Šคํ…Œ์ด์ง€ ์‹คํŒจ์œจ : 3/7

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‚˜๋จธ์ง€ ์Šคํ…Œ์ด์ง€์˜ ์‹คํŒจ์œจ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • 3 ๋ฒˆ ์Šคํ…Œ์ด์ง€ ์‹คํŒจ์œจ : 2/4
  • 4๋ฒˆ ์Šคํ…Œ์ด์ง€ ์‹คํŒจ์œจ : 1/2
  • 5๋ฒˆ ์Šคํ…Œ์ด์ง€ ์‹คํŒจ์œจ : 0/1

๊ฐ ์Šคํ…Œ์ด์ง€์˜ ๋ฒˆํ˜ธ๋ฅผ ์‹คํŒจ์œจ์˜ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • [3,4,2,1,5]

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

๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ๋งˆ์ง€๋ง‰ ์Šคํ…Œ์ด์ง€์— ์žˆ์œผ๋ฏ€๋กœ 4๋ฒˆ ์Šคํ…Œ์ด์ง€์˜ ์‹คํŒจ์œจ์€ 1์ด๋ฉฐ ๋‚˜๋จธ์ง€ ์Šคํ…Œ์ด์ง€์˜ ์‹คํŒจ์œจ์€ 0์ด๋‹ค.

  • [4,1,2,3]

 

 

๋ฌธ์ œ ํ’€์ด

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

import Foundation

func solution(_ N: Int, _ stages: [Int]) -> [Int] {
    var failureRates: [(Int, Double)] = []
    var failPlayer = [Int: Int]()
    var totalPlayers = stages.count

    for i in stages {
        failPlayer[i] = ( failPlayer[i] ?? 0 ) + 1
    }
    for i in 1...N {
        guard let failPlayer = failPlayer[i] else {
            failureRates.append((i, 0))
            continue
        }
        
        let failureRate = Double(failPlayer) / Double(totalPlayers)
        failureRates.append((i, failureRate))
        
        totalPlayers -= failPlayer
    }
    return failureRates.sorted { $0.1 > $1.1 }.map { $0.0 }
}

๋‚˜์—๊ฒŒ ์ฒ˜์ฐธํžˆ ์‹คํŒจ๊ฐ์„ ์•ˆ๊ฒจ์ค€ ๋ฌธ์ œ.

 

 

์ €๋ฒˆ์ฃผ๋ถ€ํ„ฐ ํ’€์—ˆ์ง€๋งŒ, 3๋ฒˆ 9๋ฒˆ 21๋ฒˆ์˜ ์‹œ๊ฐ„์ดˆ๊ณผ ๋ฌธ์ œ๋กœ ์• ๋ฅผ ๋จน์—ˆ๋‹ค.

 

๋‚˜์˜ ํ’€์ด์—์„œ์˜ ๋ฌธ์ œ์ ์€ N์ด ๋Œ์•„๊ฐ€๋Š” for๋ฌธ ์•ˆ์—์„œ failurePlayer ( ํ•ด๋‹น ์Šคํ…Œ์ด์ง€์—์„œ๋ฅผ ๊นจ์ง€ ๋ชปํ•˜๋Š” ํ”Œ๋ ˆ์ด์–ด ) ๋ฅผ ๊ตฌํ•˜๋ ค๊ณ  ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๋Œ€ ์‹คํ–‰์‹œ๊ฐ„์ด 500 * 200,000 ์ด ๋˜์–ด๋ฒ„๋ฆฐ ๊ฒƒ์ด๋‹ค. ๊ฑฐ๊ธฐ๊นŒ์ง€ ์ƒ๊ฐํ•ด๋‚ด์ง€ ๋ชปํ–ˆ๋˜ ๋‚ด๊ฐ€ ๋„ˆ๋ฌด ํ•œ์‹ฌํ•˜๊ณ .. ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ๋งŒ ์งœ๊ณ  ์‹ถ์–ด์„œ for๋ฌธ์•ˆ์— for๋ฌธ์ด ๋Œ์•„๊ฐ„๋‹ค๋Š” ๊ฒƒ์„ ์ธ์ง€ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ์ € ๋ฌดํ•œํ•œ ์˜ค๋‹ต ํ–‰๋ ฌ์ด ์ง„์งœ ์ด ์ด์œ ๋งŒ์ด์—ˆ๋‹ค๋Š”๊ฒŒ ๋ฏฟ๊ธฐ์ง€๊ฐ€ ์•Š๋Š”๋‹ค. ๊ทธ๋ž˜๋„ ๋ญ ์–ด์งธ, ์ด์ œ๋ผ๋„ ์•Œ์•˜์œผ๋‹ˆ ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” for๋ฌธ์•ˆ์— for๋ฌธ์„ ๋„ฃ์ง€ ์•Š๋„๋ก ์‹คํ–‰ ์‹œ๊ฐ„์ด ๋Š๋ ค์ง€๋Š” ์ด์œ ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ๋ถ„์„ํ•ด ๊ฐ™์€ ์‹ค์ˆ˜๋ฅผ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.

 

failplayer๋ฅผ ๊ตฌํ•˜๋Š” ๊ณผ์ •์„ for๋ฌธ์—์„œ ๋ถ„๋ฆฌ๋งŒ ํ•ด์ฃผ์—ˆ๋Š”๋ฐ๋„ ์‹คํ–‰์‹œ๊ฐ„์ด 500 + 200,000์ด ๋˜์–ด์„œ ํ™• ์ค„์–ด๋“ค์—ˆ๋‹ค.

 

๋‚œ ์‹คํ–‰์‹œ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด → ๋”•์…”๋„ˆ๋ฆฌ → ํŠœํ”Œ ๋กœ ๋ฐ”๊พธ๋Š” ๊ณผ์ •์„ ๊ฑฐ์ณค์ง€๋งŒ, ๋‹ค ์“ธ๋ฐ์—†๋Š” ์ผ์ด์—ˆ๋‹ค. ๊ทธ๋ž˜๋„ ๊ทธ ๊ณผ์ •์—์„œ ์–ป์€ ๊ฒƒ์„ ํ™•์‹คํ•˜๊ฒŒ ์žˆ๋‹ค.

 

[ ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ๋ฒ• ]

โ˜‘๏ธ ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ

let dictionary = ["b": 1, "a": 2, "c": 3]
let sortedDictionary = dictionary.sorted { $0.key < $1.key }
print(sortedDictionary)  // ์ถœ๋ ฅ: [("a", 2), ("b", 1), ("c", 3)]

โ˜‘๏ธ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ

let dictionary = ["b": 1, "a": 2, "c": 3]
let sortedDictionary = dictionary.sorted { $0.value < $1.value }
print(sortedDictionary)  // ์ถœ๋ ฅ: [("b", 1), ("a", 2), ("c", 3)]

์—ฌ๊ธฐ์„œ key ๊ฐ’๋งŒ์„ value ๊ฐ’๋งŒ์„ ๋นผ์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด, .map{ $0.key } ๋ฅผ ํ•˜๊ฑฐ๋‚˜ .map{ $0.value }๋ฅผ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

 

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

import Foundation

func solution(_ N:Int, _ stages:[Int]) -> [Int] {

    var failure: [Int: Float] = [:]
    var player: Int = stages.count

    for i in 1...N {
        let n = stages.filter { $0 == i }.count
        failure[i] = Float(n)/Float(player)
        player -= n
    }

    return failure.sorted(by: <).sorted(by: { $0.value > $1.value }).map {$0.key}
}

๋‚˜๋„ ์ด ํ’€์ด๋กœ ํ’€์—ˆ๋Š”๋ฐ ์‹œ๊ฐ„์ดˆ๊ณผ ๋–ณ๋Š”๋ฐ ์ด์‚ฌ๋žŒ์€ ์™œ..!!!! ์„ค๋งˆ Double์ด ์•„๋‹Œ Float๋กœ ํ’€์–ด์„œ?!

 

mport Foundation

func solution(_ N:Int, _ stages:[Int]) -> [Int] {
    var array = Array<Int>(repeating: 0, count: N)
    stages.filter { $0 <= N }.forEach { array[$0 - 1] += 1 }

    return array.reduce(([Double]() ,stages.count)) {
        let rate = Double($1) / Double($0.1)
        return ($0.0 + [rate], $0.1 - $1)

    }.0
        .enumerated()
        .sorted { $0.element > $1.element }
        .map { $0.offset + 1 }
}

 

ํ’€์ด ๊ณผ์ •์ด ํ›จ์”ฌ ๊น”๋”ํ•˜๋‹ค. ์˜ค๋Š˜๋„ ์ž˜ ๋ฐฐ์šฐ๊ณ  ๊ฐ‘๋‹ˆ๋‹ค~!