๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“– Problem Solution/Programmers

2019 KAKAO BLIND RECUITMENT ์‹คํŒจ์œจ Swift

by Fomagran ๐Ÿ’ป 2020. 3. 5.
728x90
๋ฐ˜์‘ํ˜•

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

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

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

์ „์ฒด ์Šคํ…Œ์ด์ง€์˜ ๊ฐœ์ˆ˜ 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]

ํ’€์ด:์šฐ์„ ์€ fail์ด๋ผ๋Š” ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ๋„ฃ์–ด ๊ฐ ์Šคํ…Œ์ด์ง€์™€ ์‹คํŒจ์œจ์„ key์™€ value๊ฐ’์œผ๋กœ ๋„ฃ๋Š”๋‹ค.

์‹คํŒจ์œจ์„ ๊ตฌํ•˜๋Š” ๋ฒ•์€ ์šฐ์„  stages์— ์กด์žฌํ•˜๋Š” ์ˆซ์ž๋“ค์„ ์ฐจ๋ก€๋Œ€๋กœ ๊ฐฏ์ˆ˜๋ฅผ count๋ผ๋Š” ๋ณ€์ˆ˜๋กœ ์„ธ์–ด์ค€๋‹ค.

๋งŒ์•ฝ 0์ด๋ผ๋ฉด ํ•ด๋‹น ์Šคํ…Œ์ด์ง€์˜ ์‹คํŒจ์œจ์„ 0์œผ๋กœ ๋„ฃ๊ณ  ์•„๋‹ˆ๋ผ๋ฉด ๋‚จ์€ ํ”Œ๋ ˆ์ด์–ด๋ฅผ count๋กœ ๋‚˜๋ˆ ์ค€๋‹ค.

์˜ˆ) ์ด 2๋‹จ๊ณ„์˜ ์Šคํ…Œ์ด์ง€์—์„œ 8๋ช…์˜ ํ”Œ๋ ˆ์ด์–ด ์ค‘ 7๋ช…์ด 1๋‹จ๊ณ„ 1๋ช…์ด 2๋‹จ๊ณ„์— ์žˆ๋‹ค๋ฉด 

1๋‹จ๊ณ„์— 7๋ช…์ด ์žˆ์œผ๋ฏ€๋กœ 7/8 ์ด ์‹คํŒจ์œจ์ด ๋œ๋‹ค.

2๋‹จ๊ณ„์—์„  7๋ช…์ด ์ด๋ฏธ 1๋‹จ๊ณ„์— ์žˆ์œผ๋ฏ€๋กœ 8-7 = 1 1์„ 1๋กœ ๋‚˜๋ˆ ์ฃผ๋ฉด ์‹คํŒจ์œจ์€ 1์ด ๋œ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ๊ตฌํ•ด์ค€ ๋’ค ์ค‘๋ณต๊ฐ’์„ ๋นผ๊ธฐ ์œ„ํ•ด s๋ผ๋Š” set๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ  fail์˜ value๊ฐ’์„ ๋ชจ๋‘ ๋„ฃ์€ ๋‹ค์Œ์—

for๋ฌธ์— s๋ฅผ ์—ญ์ •๋ ฌํ•œ ๊ฒƒ ์ค‘ fail์˜ ํ‚ค ๊ฐ’์ด ๊ฐ™์€ ๊ฒŒ ์žˆ๋‹ค๋ฉด arr์— ๋„ฃ์–ด์ค˜๋ผ ๋ผ๊ณ  ํ•˜๋ฉด index๊ฐ€ ์ฐจ๋ก€๋Œ€๋กœ ์‹คํŒจ์œจ์ด ๋†’์€ ๊ฐ’์— ๋”ฐ๋ผ ๋“ค์–ด๊ฐ„๋‹ค.

1.๋”•์…”๋„ˆ๋ฆฌ๋กœ ํ‚ค์™€ ๋ฐธ๋ฅ˜๊ฐ’์„ ๋งŒ๋“ค๊ณ 

2.์„ธํŠธ์— ๋ฐธ๋ฅ˜๊ฐ’๋งŒ ๋„ฃ์–ด์„œ ์ •๋ ฌํ•ด ์ค€ ๋’ค

3.๋‹ค์‹œ ํฌ๋ฌธ์œผ๋กœ ์„ธํŠธ๊ฐ’๊ณผ fail์˜ ๋ฐธ๋ฅ˜๊ฐ’์„ ๋น„๊ตํ•ด์ฃผ๋ฉด ์ •๋ ฌ๋œ ํ‚ค๊ฐ’์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import Foundation
 
func solution(_ N:Int, _ stages:[Int]) -> [Int] {
    var fail = [Int:Double]()
    var arr = [Int]()
    var s = Set<Double>()
    var left = stages.count
    for j in 1...N{
        var count = 0
        for i in 0..<stages.count{
            if stages[i] == j{
                count += 1
            }
        }
        if count == 0{
            fail[j] = 0
        }else{
        fail[j] = Double(count)/Double(left)
        }
        left = left - count
    }
    for (_,value) in fail{
        s.insert(value)
    }
    for i in s.sorted(by:>){
        for j in 1...fail.count{
            if i == fail[j]{
                arr.append(j)
            }
        }
    }
    return arr
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

๋‹ค๋ฅธ ์‚ฌ๋žŒ ํ’€์ด ์ค‘ ๊ฐ€์žฅ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ

ํ’€์ด:์šฐ์„  Array(repeating,count)๋ฅผ ์ด์šฉํ•ด์„œ ์Šคํ…Œ์ด์ง€ ๊ฐฏ์ˆ˜์˜ +1๋งŒํผ์˜ ๊ธธ์ด์˜ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.

๊ทธ ๋‹ค์Œ ํฌ๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ์—ญ์ˆœ์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์— ๋งž๊ฒŒ r์— ์‹คํŒจ์œจ์„ ๋„ฃ์–ด์ค€๋‹ค.

r์„ enumrated()๋กœ offset๊ณผ element๋ฅผ ์•Œ์•„๋‚ด์–ด element๊ฐ’์— ๋งž๊ฒŒ ์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์ค€๋’ค ๊ฐ element์˜ offset์— +1 ํ•ด์ค€ ๊ฐ’์„ map์„ ํ†ตํ•ด ๋ฐฐ์น˜ํ•œ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import Foundation
 
func solution(_ n: Int, _ stages: [Int]) -> [Int] {
  var rates = Array(repeating: 0, count: n + 1)
  for stage in stages {
    for i in 0..<stage {
      rates[i] += 1
    }
  }
 
  var r = [Double]()
  for i in 0..<n {
    let offset = i + 1
    r.append(Double(rates[i] - rates[offset]) / Double(rates[i]))
  }
  return r.enumerated()
    .sorted(by: { $0.element > $1.element })
    .map({ $0.offset + 1 })
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€