Problem
Solution
ํด๋น ๋ฌธ์ ๋ ํจ์จ์ฑ์ด ํต์ฌ์ธ ๋ฌธ์ ์ ๋๋ค.
food_times๊ฐ ์ต๋ 1์ต, k๊ฐ ์ต๋ 2*10^13์ด๊ธฐ ๋๋ฌธ์ ๋จ์ํ 0์ด๋ถํฐ ์๊ฐ์ ์ฌ๋ฉฐ ์์์ ํ์ธํ๊ธฐ์ ๋๋ฌด ํฐ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค.
1. ์์์ด ๋จ์ง ์๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ํ๋ค.
์์์ ๋จน๋ ์๊ฐ์ ๋ชจ๋ ํฉ์ณ๋ k๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ผ๋ฉด k์๊ฐ์ ๋จ๋ ์์์ด ์์ต๋๋ค.
if food_times.reduce(0,+) <= k { return -1 }
2. food_times๋ฅผ ์ธ๋ฑ์ค์ ์๊ฐ์ผ๋ก ๋๋ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํฉ๋๋ค.
์ ๋ ฌ์ ํ๊ฒ ๋๋ฉด ํด๋น ์๊ฐ์ด ๋ด๊ธด ์์์ด ๋ช ๋ฒ์งธ์ธ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ Enum์ผ๋ก ๋ง๋ค์ด index์ element๋ฅผ ๋๋ ์ ์ ์ฅํฉ๋๋ค.
var foods = food_times.enumerated().sorted{$0.element > $1.element}
3. ๋จ์ ์์ ์์ ์ต์ ์๊ฐ์ ๊ณฑํ์ฌ k์์ ๋นผ์ค๋ค.
ํ๋ฒ์ ์์ ์๋ฅผ ๊ฐ์ฅ ๋ง์ด ๋บ ์ ์๋ ๊ฒ์ ํ์ฌ ๋จ์ ์์ ์์ ๊ฐ์ฅ ์ต์๊ฐ์ ๊ณฑํด์ฃผ๋ฉด ๋ฉ๋๋ค.
์ฆ, [3,5,6,7,8,9,4,4,3,3]๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๋ฉด ํ์ฌ ๋จ์ ์์ ์(10๊ฐ) * ์ต์๊ฐ(3)์ K์์ ๋นผ์ค ์ ์์ต๋๋ค.
๊ทธ ๋ค์์ ๊ฐ์ฅ ๋ง์ง๋ง์ ์ญ์ ๋ ์ต์๊ฐ์ ์ ์ฅํด์ฃผ๊ณ K๊ฐ 0๋ณด๋ค ์ ์ ๋๊น์ง ๋ฐ๋ณตํด์ค๋๋ค.
var last:Int = 0
while K - foods.count * (foods.last!.element - last) >= 0{
let min = foods.removeLast().element
K -= (foods.count+1) * (min-last)
last = min
}
4. ์ธ๋ฑ์ค ์์ผ๋ก ์ ๋ ฌํ์ฌ K๋ฅผ ๋จ์ ์์ ์ ๋งํผ ๋๋ ๊ฒ์ ๋๋จธ์ง๋ฒ ์งธ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํฉ๋๋ค.
return foods.sorted{$0.offset < $1.offset}[K%foods.count].offset + 1
Source Code
P.S
์ฒ์์ผ๋ก ํ๋ก๊ทธ๋๋จธ์ค 4๋จ๊ณ๋ฅผ ํ์๋๋ฐ ๊ฐ์ฅ ๋ง์ ์ฌ๋์ด ํผ ๋ฌธ์ ๋ฅผ ํ์ด์ ๊ทธ๋ฐ์ง 3๋จ๊ณ์ ํฌ๊ฒ ๋ค๋ฅด์ง ์๋ค๊ณ ๋๊ผ๋ค.
๊ทผ๋ฐ ์ ๋ฌธ์ ์์ ์กฐ๊ธ ์ด์ํ๊ฒ ์์์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๊ณ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ฌ์ฉํด์ ๋ฐ๋ณตํ๋ฉด ํจ์จ์ฑ์์ ์๊ฐ ์ด๊ณผ๊ฐ ๋์ค๊ณ
๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ์ฌ ๋ง์ง๋ง ๋ฒ์งธ ์์๋ฅผ ์ฌ์ฉํ๋ฉด ํต๊ณผ๊ฐ ๋๋ค... ์ ์ด๋ฌ๋๊ฑฐ์ง..
'๐ Problem Solution > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] 2020 KAKAO BLIND RECRUITMENT ๊ฐ์ฌ ๊ฒ์ (0) | 2022.01.03 |
---|---|
[Swift] ํ๋ก๊ทธ๋๋จธ์ค ์ง๊ฒ๋ค๋ฆฌ (with ์ฌ์ด ํ์ด ํฌํจ) (0) | 2022.01.03 |
[Swift] ํ๋ก๊ทธ๋๋จธ์ค ์ํด๋ฆฌ ์ฑ๋ฆฐ์ง ๊ต์ ์ ๋ณ ๋ง๋ค๊ธฐ (0) | 2021.12.14 |
[Swift] ํ๋ก๊ทธ๋๋จธ์ค ์ํด๋ฆฌ ์ฑ๋ฆฐ์ง ํผ๋ก๋ (0) | 2021.12.10 |
[Swift] ํ๋ก๊ทธ๋๋จธ์ค ์๊ฐ ์ฝ๋ ์ฑ๋ฆฐ์ง 3 n^2 ๋ฐฐ์ด ์๋ฅด๊ธฐ (0) | 2021.12.01 |
๋๊ธ