๋ฌธ์ ์ค๋ช
๋ ๋ฐ๋จน๊ธฐ ๊ฒ์์ ํ๋ ค๊ณ ํฉ๋๋ค. ๋ ๋ฐ๋จน๊ธฐ ๊ฒ์์ ๋ (land)์ ์ด Nํ 4์ด๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ๋ชจ๋ ์นธ์๋ ์ ์๊ฐ ์ฐ์ฌ ์์ต๋๋ค. 1ํ๋ถํฐ ๋ ์ ๋ฐ์ผ๋ฉฐ ํ ํ์ฉ ๋ด๋ ค์ฌ ๋, ๊ฐ ํ์ 4์นธ ์ค ํ ์นธ๋ง ๋ฐ์ผ๋ฉด์ ๋ด๋ ค์์ผ ํฉ๋๋ค. ๋จ, ๋ ๋ฐ๋จน๊ธฐ ๊ฒ์์๋ ํ ํ์ฉ ๋ด๋ ค์ฌ ๋, ๊ฐ์ ์ด์ ์ฐ์ํด์ ๋ฐ์ ์ ์๋ ํน์ ๊ท์น์ด ์์ต๋๋ค.
์๋ฅผ ๋ค๋ฉด,
| 1 | 2 | 3 | 5 |
| 5 | 6 | 7 | 8 |
| 4 | 3 | 2 | 1 |
๋ก ๋ ์ด ์ฃผ์ด์ก๋ค๋ฉด, 1ํ์์ ๋ค๋ฒ์งธ ์นธ (5)๋ฅผ ๋ฐ์์ผ๋ฉด, 2ํ์ ๋ค๋ฒ์งธ ์นธ (8)์ ๋ฐ์ ์ ์์ต๋๋ค.
๋ง์ง๋ง ํ๊น์ง ๋ชจ๋ ๋ด๋ ค์์ ๋, ์ป์ ์ ์๋ ์ ์์ ์ต๋๊ฐ์ returnํ๋ solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์. ์ ์์ ๊ฒฝ์ฐ, 1ํ์ ๋ค๋ฒ์งธ ์นธ (5), 2ํ์ ์ธ๋ฒ์งธ ์นธ (7), 3ํ์ ์ฒซ๋ฒ์งธ ์นธ (4) ๋ ์ ๋ฐ์ 16์ ์ด ์ต๊ณ ์ ์ด ๋๋ฏ๋ก 16์ return ํ๋ฉด ๋ฉ๋๋ค.
์ ํ์ฌํญ
- ํ์ ๊ฐ์ N : 100,000 ์ดํ์ ์์ฐ์
- ์ด์ ๊ฐ์๋ 4๊ฐ์ด๊ณ , ๋ (land)์ 2์ฐจ์ ๋ฐฐ์ด๋ก ์ฃผ์ด์ง๋๋ค.
- ์ ์ : 100 ์ดํ์ ์์ฐ์
์ ์ถ๋ ฅ ์
land | answer |
[[1,2,3,5],[5,6,7,8],[4,3,2,1]] | 16 |
ํ์ด:
์ด ๋ฌธ์ ์ ํต์ฌ์ ํ์ฌ ํ์ ์ซ์ 4๊ฐ์ ํ์ฌ ์ด์ ์ ์ธํ ๋ฐ๋ก ์ ํ ์ซ์ ์ค ๊ฐ์ฅ ํฐ ์ซ์๋ฅผ ๋ํด์ ๊ฐ์ฅ ํฐ ๊ฐ์ ํ์ฌ์ด ๊ฐ์ผ๋ก ๋ฐ๊ฟ๋๊ฐ๋ ๊ฒ์ ๋๋ค.
์ด๋ ๊ฒ ๋งํ๋ฉด ์ดํดํ๊ธฐ๊ฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ์๋ฅผ ๋ค๋ฉด์ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
๋ฌธ์ ์ ์์ ๊ฐ์ด ์ฒซ๋ฒ์งธํ [1,2,3,5] ๋๋ฒ์งธํ [5,6,7,8] ์ธ๋ฒ์งธํ [4,3,2,1] ์ ๋๋ค. (๋ฐ๋ก ์ ํ์ด ์กด์ฌํด์ผํ๋ฏ๋ก 2๋ฒ์งธ ํ๋ถํฐ ์์ํด์ผํฉ๋๋ค.)
์์ํ์ ๋๋ฒ์งธ ํ์ ๋๋ค. ์ฆ,ํ์ฌํ์ ๋๋ฒ์งธ ํ์ ๋๋ค. [5,6,7,8]
ํ์ฌํ์ ๋ฐ๋ก ์ ํ์ ์ฒซ๋ฒ์งธ ํ ์ ๋๋ค. [1,2,3,5]
๋ฐ๋ก ์ ํ์์ 1๋ฒ์งธ ์ด์ ์ ์ธํ ์ซ์ [2,3,5] ์ค ๊ฐ์ฅ ํฐ ์ซ์๋ 5์ ๋๋ค.
ํ์ฌํ์ 1๋ฒ์งธ ์ด์ ๋ํด์ฃผ๋ฉด 5 + 5 ์ด๋ฏ๋ก 10์ด ๋ฉ๋๋ค.
๋ฐ๋ก ์ ํ์์ 2๋ฒ์งธ ์ด์ ์ ์ธํ ์ซ์[1,3,5] ์ค ๊ฐ์ฅ ํฐ ์ซ์๋ 5์ ๋๋ค.
ํ์ฌํ์ 2๋ฒ์งธ ์ด์ ๋ํด์ฃผ๋ฉด 6 + 5 ์ด๋ฏ๋ก 11์ด ๋ฉ๋๋ค.
์ด์ ๊ฐ์ด ์งํํด์ฃผ๋ฉด ๋๋ฒ์งธ ํ์ [10,11,12,11]์ด ๋ฉ๋๋ค.
์ด๋ ๊ฒ 4๊ฐ ์ซ์๊ฐ ๋ค ๋ฐ๋์๋ค๋ฉด ๋ค์ ํ์ผ๋ก ๋์ด๊ฐ๋๋ค. ๊ทธ๋ฌ๋ฉด ํ์ฌํ์ ์ธ๋ฒ์งธํ [4,3,2,1]์ผ๋ก ๋ฐ๋๊ณ ๋ฐ๋ก ์ ํ์ ๋๋ฒ์งธ ํ์ด๋ฏ๋ก [10,11,12,11]์ด ๋ฉ๋๋ค.
์๊น์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ฐ๋ก ์ ํ์์ 1๋ฒ์งธ ์ด์ ์ ์ธํ ์ซ์ [11,12,11]์์ ๊ฐ์ฅ ํฐ ์ซ์๋ 12์ ๋๋ค.
ํ์ฌํ์ 1๋ฒ์งธ ์ด์ ๋ํด์ฃผ๋ฉด 4 + 12 ์ด๋ฏ๋ก 16์ด ๋ฉ๋๋ค.
์ด์ ๊ฐ์ด ์งํํด์ฃผ๋ฉด [16,15,13,13]์ด ๋ฉ๋๋ค.
์ด๋ ๊ฒ ์งํํ๋ค๊ฐ ๋ง์ง๋งํ์ด ๋์์ ๊ฒฝ์ฐ์ ๋ง์ง๋งํ์ ๊ฐ์ฅ ํฐ ์ซ์๋ฅผ ๋ฐํํด์ฃผ๋ฉด ๋ฉ๋๋ค.
๋ฌธ์ ์ ๊ฒฝ์ฐ 3๋ฒ์งธ ํ์ด ๋ง์ง๋ง ํ์ด๊ธฐ ๋๋ฌธ์ [16,15,13,13] ์ค ๊ฐ์ฅ ํฐ ์ซ์๋ 16์ด๋ฏ๋ก ์ด๊ฒ์ด ์ ๋ต์ด ๋ฉ๋๋ค.
์ฝ๋๋ก ์ค๋ช
land[1]๋ถํฐ ์์ํด์ผํ๊ธฐ ๋๋ฌธ์ land[0]์ ๋ณ์ maxs์ ๋ด์๋์ต๋๋ค. => var maxs = land[0]
for๋ฌธ์ ์ด์ฉํด 1๋ถํฐ land์ ๋ฐฐ์ดํฌ๊ธฐ๋งํผ ๋ฐ๋ณตํด์ค๋๋ค. for i in 1..<land.count{ ... }
ํ์ฌํ์ ์๋ฏธํ๋ land[i]๋ฅผ current๋ผ๋ ์์์ ๋ฃ์ด์ค๋๋ค... = > let current = land[i]
maxs๊ฐ์ ๊ธฐ์ตํ copyMaxs๋ผ๋ ๋ณ์๋ฅผ ๋ง๋ค์ด์ค๋๋ค. (maxs์ ๊ฐ์ด ๊ณ์ ๋ณํ๊ธฐ ๋๋ฌธ์ ๋ง๋ค์ด์ค์ผ ํฉ๋๋ค.)=> var copyMaxs = maxs
for๋ฌธ ์์ ๋ for๋ฌธ์ ์ฌ์ฉํ์ฌ ์ด์ ๊ฐฏ์์ธ 0๋ถํฐ 3๊น์ง ์ด 4๋ฒ ๋ฐ๋ณตํด์ค๋๋ค. for j in 0..<4{ ... }
ํด๋น ํ์ ์ต๋๊ฐ์ด ์ด๋ค ์ด์ธ์ง ์์๋ด๊ธฐ ์ํ row๋ผ๋ ํจ์๋ฅผ ๋ง๋ค์ด์ค๋๋ค.
func row(_ land:[Int]) -> Int {
var max = 0
for i in 0..<4 {
if land[i] == land.max(){
max = i
break
}
}
return max
}
๋ง์ฝ ํด๋น ์ด์ด ์ต๋๊ฐ์ ์ด์ด ์๋๋ผ๋ฉด maxs์ ์ด์ ํ์ฌํ์ ์ด๊ณผ maxs์ ์ต๋๊ฐ์ ๋ํด์ค๋๋ค. => if j != row(copyMaxs) {
maxs[j] = current[j] + copyMaxs.max()!}
์๋๋ผ๋ฉด maxs์ ์ด์ ํ์ฌํ์ ์ด๊ณผ maxs์ ๋๋ฒ์งธ๋ก ํฐ ๊ฐ์ ๋ํด์ค๋๋ค. (copyMaxs๋ฅผ ํฐ ๊ฐ์ผ๋ก ์ ๋ ฌํ ๋ค copyMaxs[1]์ ํ๋ฉด ๋๋ฒ์งธ๋ก ํฐ ๊ฐ์ ์์๋ผ ์ ์์) else { copyMaxs.sort(by:>)
maxs[j] = current[j] + copyMaxs[1] }
๊ทธ๋ฆฌ๊ณค maxs์ ๊ฐ์ฅ ํฐ ๊ฐ์ ๋ฐํํด์ค๋๋ค. => return maxs.max()!
์ ์ฒด์ฝ๋
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
|
import Foundation
func solution(_ land:[[Int]]) -> Int{
var maxs = land[0]
for i in 1..<land.count{
let current = land[i]
var copyMaxs = maxs
for j in 0..<4{
if j != row(copyMaxs) {
maxs[j] = current[j] + copyMaxs.max()!
}else{
copyMaxs.sort(by:>)
maxs[j] = current[j] + copyMaxs[1]
}
}
}
return maxs.max()!
}
func row(_ land:[Int]) -> Int {
var max = 0
for i in 0..<4 {
if land[i] == land.max(){
max = i
break
}
}
return max
}
|
'๐ Problem Solution > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค ์ต์๊ฐ ๋ง๋ค๊ธฐ Swift (0) | 2020.08.28 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค ์ต๋๊ฐ๊ณผ ์ต์๊ฐ (0) | 2020.08.28 |
ํ๋ก๊ทธ๋๋จธ์ค ์ฌ๋ฐ๋ฅธ ๊ดํธ Swift (0) | 2020.08.10 |
ํ๋ก๊ทธ๋๋จธ์ค ๋ค์ ํฐ ์ซ์ Swift (0) | 2020.06.21 |
ํ๋ก๊ทธ๋๋จธ์ค ์นดํซ Swift (0) | 2020.05.28 |
๋๊ธ