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

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋•…๋”ฐ๋จน๊ธฐ Swift

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

๋ฌธ์ œ ์„ค๋ช…

๋•…๋”ฐ๋จน๊ธฐ ๊ฒŒ์ž„์„ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋•…๋”ฐ๋จน๊ธฐ ๊ฒŒ์ž„์˜ ๋•…(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
}

 

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€