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

[Swift] 2019 KAKAO WINTER INTERNSHIP ์ง•๊ฒ€๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ

by Fomagran ๐Ÿ’ป 2021. 7. 23.
728x90
๋ฐ˜์‘ํ˜•

 

Problem

 

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์ง•๊ฒ€๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ

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

programmers.co.kr


Solution

 

ํ•ด๋‹น ๋ฌธ์ œ๋Š” ์ด์ง„ํƒ์ƒ‰์œผ๋กœ ํ’€์–ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

 

1. stones์˜ ์ˆซ์ž๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•œ ๋’ค ์ค‘๋ณต ์ˆซ์ž๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

 

stones๋ฅผ Set๋กœ ๋งŒ๋“ค๊ณ  sorted ๋ฉ”์†Œ๋“œ๋กœ ์ •๋ ฌํ•ด์ค๋‹ˆ๋‹ค. (sort๋ผ๊ณ  ๋ถ€๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.)

 

(ex [1,1,5,3,2,2] -> [1,2,3,5])

 

2. ๊ฑด๋„ ์ˆ˜ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ์ฒดํฌํ•ฉ๋‹ˆ๋‹ค.

 

0์ดํ•˜์˜ ์ˆซ์ž์˜ ์—ฐ์†๋œ ๊ฐฏ์ˆ˜๊ฐ€ k๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ํฌ๋‹ค๋ฉด ๊ฑด๋„ ์ˆ˜ ์—†๋Š” ์ง•๊ฒ€๋‹ค๋ฆฌ์ž…๋‹ˆ๋‹ค.

 

(ex [-1, 0, -2, 1, 0] -> ์—ฐ์†๋œ 0์ดํ•˜ ๊ฐฏ์ˆ˜๋Š” 3)

 

3. sort๋ฅผ ์ด์ง„ํƒ์ƒ‰ 

 

์ด์ง„ ํƒ์ƒ‰์œผ๋กœ sort์•ˆ์˜ ์ˆซ์ž ์ค‘ ๊ฑด๋„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ตœ๋Œ€์˜ ๊ฐ’์„ ์•Œ์•„๋ƒ…๋‹ˆ๋‹ค.


Source Code

 

import Foundation
func solution(_ stones:[Int], _ k:Int) -> Int {
return binarySearch(stones: stones,k: k)
}
func binarySearch(stones:[Int],k:Int) -> Int {
let sort = Set(stones).sorted()
var maxCount:Int = 0
var min = 0
var max = sort.count
while min <= max {
let mid = (min + max) / 2
let newStones = stones.map{$0 - sort[mid]}
if !isCrossable(stones: newStones, k: k) {
maxCount = mid
max = mid - 1
} else {
min = mid + 1
}
}
return sort[maxCount]
}
func isCrossable(stones:[Int],k:Int) -> Bool {
var counts = Array(repeating: 0, count: stones.count)
for (i,stone) in stones.enumerated() {
if stone < 1 {
counts[i] = i == 0 ? 1 : counts[i-1] + 1
}
if counts[i] == k {
return false
}
}
return true
}
728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€