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์ ๋งค์ด๋ง์ ๋๊ผ๊ณ , ์์ผ๋ก์ ๋ฏธ๋๊ฐ ํ๋ํ ๊ฒ์ด๋ผ๋ ์๊ฐ๊ณผ ๋ ํ์คํ๊ฒ ๊ณต๋ถํด์ผ๊ฒ ๋ค๋ ์๊ฐ๋ง ํ ํ๋ฃจ์๋ค.
