mngon
article thumbnail

Swift ๊ณต๋ถ€ํ•˜๊ณ  ์ฒ˜์Œ์œผ๋กœ ๋ฌธ์ œ ํ•œ ๋ฒˆ ํ’€์–ด๋ณด๋ ค๊ณ  ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๊ณ ๋“์  Kit dp ์ •๋ ฌ level 1 ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋ก  ๊ณ ์ƒ์„ ์ข€ ํ–ˆ๋Š”๋ฐ, Swift๊ฐ€ ์•„์ง ์ต์ˆ™ํ•˜์ง€ ์•Š์•„์„œ ์ƒ๊ธด ๋ฌธ์ œ์˜€๋‹ค. ArraySlice์™€ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ณผ์ •์—์„œ ๋‚˜์˜ ๋ถ€์กฑํ•จ์ด ๋งŽ์ด ๋“œ๋Ÿฌ๋‚ฌ๋‹ค.

 

์šฐ์„  ๋‚ด ์ฝ”๋“œ๋Š” ์ด๋ ‡๋‹ค.

var resultSet: [Int] = []
for command in commands {
        let start: Int = command[0]-1
        let end: Int = command[1]-1
        let result = array[start...end]
        let sortedresult = result.sorted()
        resultSet.append(sortedresult[command[2]-1])
    }
    
return resultSet

 

(๋งŽ์ด ๋ถ€์กฑํ•œ ์ฝ”๋“œ์ผ ๊ฑฐ๋ผ ์ƒ๊ฐํ•œ๋‹ค. ๋‚˜์ค‘์— ๋‚ด๊ฐ€ ์ด ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ๊ท€์—ฌ์šธ ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค.) ๊ท€์—ฝ๋‹ค.

๋‚ด๊ฐ€ ์ฝ”๋“œ ์งœ๋Š” ๊ณผ์ •์—์„œ 2๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ,

์ฒซ๋ฒˆ ์งธ๋Š” for๋ฌธ ์† command๋Š” ์ƒ์ˆ˜๋ผ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜๊ฐ€ ์—†์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ .removeLast()๋‚˜ .removeFirst()๊ฐ™์€ ๋ฉ”์„œ๋“œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ์•„์ง const์— ๋Œ€ํ•ด์„œ๋Š” ์ •ํ™•ํ•œ ์ดํ•ด๊ฐ€ ์•ˆ ๋ผ์„œ ๋‚˜์ค‘์— ์ •๋ฆฌํ•ด ๋ณผ ์ƒ๊ฐ์ด๋‹ค.

 

 ๋‘๋ฒˆ ์งธ๊ฐ€ ๋‚ด๊ฐ€ ๋งŽ์ด ๊ณ ์ƒํ•œ ๋ถ€๋ถ„์ด๋‹ค. ๋ฐ”๋กœ ArraySlice์ธ๋ฐ, ํ•œ ๋ธ”๋กœ๊ทธ์˜ ๊ธ€์— ๋”ฐ๋ฅด๋ฉด,

ArraySlice๋Š” ๋ฐฐ์—ด์˜ ๋ณต์‚ฌ๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์‚ฌ๋ณธ์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๊ณ , ์›๋ณธ ๋ฐฐ์—ด์˜ ์ „์ฒด์˜ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์ฐธ์กฐ๋งŒ ํ•œ๋‹ค.

(์ถœ์ฒ˜: https://soooprmx.com/swift-array-04-arrayslice/)

 

let array = [2,3,7,4,5]
var slicedArray = array[2...4]

print(slicedArray)    // [7,4,5]
print(slicedArray[0]) // error: Index out of bounds
print(slicedArray[3]) // 4

 ์œ„ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด slicedArray๋กœ ๋งŒ๋“  ๋ฐฐ์—ด์˜ ๊ฒฐ๊ด๊ฐ’์€ [7,4,5]๋กœ ๋ณด์ธ๋‹ค. ํ•˜์ง€๋งŒ Index 0์œผ๋กœ ์ ‘๊ทผํ•  ์‹œ์— out of bounds ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋ณต์‚ฌ๋ณธ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์„ธ ๋ฒˆ์งธ ์ถœ๋ ฅ์„ ๋ณด๋ฉด Index 3์œผ๋กœ๋Š” ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ๋ฐ, ์ด๋Š” ์›๋ณธ ๋ฐฐ์—ด์˜ Index ๊ฐ’์ด๊ณ  4๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 ์—ฌ๊ธฐ์„œ ์—ฐ์žฅํ•ด์„œ ๋‚˜๋Š” ์ฒ˜์Œ์— .sort()๋กœ ์ •๋ ฌํ–ˆ์—ˆ๋Š”๋ฐ, ์™œ ์ž๊พธ ์—๋Ÿฌ๊ฐ€ ๋‚˜๊ณ  ํ’€ ์ˆ˜ ์—†์—ˆ๋Š”์ง€ .sorted()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

sort๋Š” ํ˜ธ์ถœ๋œ ๋ฐฐ์—ด์„ ๋ณ€๊ฒฝํ•˜์—ฌ ๊ฐ’๋“ค์ด ์ •๋ ฌ๋˜์ง€๋งŒ, sorted๋Š” ์ •๋ ฌ๋œ ๊ฐ’์œผ๋กœ ๋œ ๋ฐฐ์—ด์˜ ์‚ฌ๋ณธ์„ ๋ฆฌํ„ดํ•œ๋‹ค.

(์ถœ์ฒ˜: https://hyerios.tistory.com/71)

 

์ด ๋ธ”๋กœ๊ทธ๋ฅผ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด .sort()๋Š” ์›๋ณธ ๋ฐฐ์—ด์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์ฃผ์ง€๋งŒ, .sorted()๋Š” ์›๋ณธ ๋ฐฐ์—ด์€ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ๋ณต์‚ฌ๋ณธ์„ ๋ฆฌํ„ดํ•ด์ค€๋‹ค๋Š” ๊ฒƒ์— ์ฐจ์ด๊ฐ€ ์žˆ์—ˆ๋‹ค. 

var array = [2,4,7,4,5]
array.sorted()
print(array)    // [2,4,7,4,5]

let sortedArray = array.sorted()
print(sortedArray)  // [2,4,4,5,7]

array.sort()
print(array)    // [2,4,4,5,7]

 ์ฝ”๋“œ๋กœ ํ™•์ธํ•ด๋ณด๋ฉด ์ฒ˜์Œ .sorted()๋ฅผ ์‚ฌ์šฉํ•ด๋„ ์›๋ณธ ๋ฐฐ์—ด์€ ๊ทธ๋Œ€๋กœ์ธ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๊ณ , ๋ฆฌํ„ด ๊ฐ’์„ ๋˜ ๋‹ค๋ฅธ ๋ฐฐ์—ด์— ์ €์žฅํ•˜๋ฉด ์ž˜ ์ •๋ ฌ๋˜์–ด ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜๋ฉด .sort()ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์›๋ณธ ๋ฐฐ์—ด์ด ์ •๋ ฌ์ด ๋œ๋‹ค.

 

๊ทธ๋ž˜์„œ ArraySlice + .sort()๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ๋Š” ์›๋ณธ ๋ฐฐ์—ด๋งŒ ๋‹ค๋ฃจ๊ฒŒ ๋œ ๊ฒƒ์ด์—ˆ๊ณ  startIndex๊ฐ€ 0์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— out of bounds ์—๋Ÿฌ๊ฐ€ ๋‚˜ํƒ€๋‚œ ๊ฒƒ์ด์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ .sorted()๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒƒ๋งŒ์œผ๋กœ ์›ํ•˜๋Š” Index์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ–ˆ๋‹ค.

 

์ •๋ ฌ์ด๊ณ  1๋‹จ๊ณ„๋ผ์„œ ๋งŒ๋งŒํ•˜๊ฒŒ ์ƒ๊ฐํ–ˆ๋˜ ๋‚˜๋ฅผ ๋ฐ˜์„ฑํ–ˆ๊ณ , ํ•œ ์–ธ์–ด๋ฅผ ๊ณต๋ถ€ํ•ด๋†“์œผ๋ฉด ๋‹ค๋ฅธ ์–ธ์–ด๋Š” ์‰ฝ๊ฒŒ ๊ณต๋ถ€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ƒ๊ฐ์€ ์ ‘์—ˆ๋‹ค.

Swift์˜ ๋งค์šด๋ง›์„ ๋А๊ผˆ๊ณ , ์•ž์œผ๋กœ์˜ ๋ฏธ๋ž˜๊ฐ€ ํ—˜๋‚œํ•  ๊ฒƒ์ด๋ผ๋Š” ์ƒ๊ฐ๊ณผ ๋” ํ™•์‹คํ•˜๊ฒŒ ๊ณต๋ถ€ํ•ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ๋งŒ ํ•œ ํ•˜๋ฃจ์˜€๋‹ค.

profile

mngon

@๋ง๊ณค

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!