๐ ์ฝ๋ฉํ ์คํธ
โ๐ป Github
์! ๋๋์ด ๋ ๋ฒจ 2 ํผ๋ค!
์ฌ์ค ์์ง ๋ชป ํผ Lv.1 ์น๊ตฌ๋ค์ด ๋๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ง๋ง, ์ด ์น๊ตฌ๋ค์ ์ฝ๋์นดํ์ ๋ฒํธ๊ฐ ์๋ ์น๊ตฌ๋ค์ด๋ผ ์ฃผ๋ง์ ํด๊ฒฐํ๊ธฐ๋ก ํ๊ณ , ์ค๋์ ์์ฃผ ์ค๋ ๋ ๋ง์์ผ๋ก Lv.2๋ฅผ ํ์๋ค. ์์ ์ฐพ๊ธฐ๋ ํ์๋๋ฐ ์ ํ๊ณ ์๋ ๋ฌธ์ ๋...? -3-
๋ฌธ์ ์ค๋ช
๋ฌธ์์ด s์๋ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋ ์ซ์๋ค์ด ์ ์ฅ๋์ด ์์ต๋๋ค. str์ ๋ํ๋๋ ์ซ์ ์ค ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ์ฐพ์ ์ด๋ฅผ "(์ต์๊ฐ) (์ต๋๊ฐ)"ํํ์ ๋ฌธ์์ด์ ๋ฐํํ๋ ํจ์, solution์ ์์ฑํ์ธ์.
์๋ฅผ๋ค์ด s๊ฐ "1 2 3 4"๋ผ๋ฉด "1 4"๋ฅผ ๋ฆฌํดํ๊ณ , "-1 -2 -3 -4"๋ผ๋ฉด "-4 -1"์ ๋ฆฌํดํ๋ฉด ๋ฉ๋๋ค.
์ ํ ์กฐ๊ฑด
- s์๋ ๋ ์ด์์ ์ ์๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์์ต๋๋ค.
์ ์ถ๋ ฅ ์
s | return |
"1 2 3 4" | "1 4" |
"-1 -2 -3 -4" | "-4 -1" |
"-1 -1" | "-1 -1" |
๋ฌธ์ ํ์ด
๋์ ํ์ด
func solution(_ s:String) -> String {
var str = s.split(separator: " ").map{ Int(String($0))! }
return "\(str.min()!) \(str.max()!)"
}
Lv.2 ๋ฌธ์ ์ฌ์ ์ค๋๊ฑธ๋ฆด ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๊ณ 30๋ถ์ ๋ ์๊ฐ์ ์๋น๊ฒจ ์ฑ ์์ ์์๋๋ฐ, ์ ์ด์งํ๋ค.
์ด์ ๊ณต๋ถํ๋ ๋ฌธ์์ด ๋ถ๋ฆฌ ์ฝ๋ ๋ฐฉ์์ด ์ค๋ ๋ฌธ์ ์์ ๊ทธ๋๋ก ๋์์ ์ ์ฉํด์ฃผ์๋ค. ๋ค๋ง ๋ฐ๋ ๊ฒ์ Int๋ก ๋ฐํํด์ฃผ๋ ๊ฒ์ด๋ค. ๊ทธ๋์ผ min๊ณผ max ํจ์๋ฅผ ์ ์ฉ์ํฌ ์ ์์๋ค.
๋ค๋ฅธ ์ฌ๋ ํ์ด
func solution(_ s:String) -> String {
var arr = s.components(separatedBy: " ").map({(value:String) -> Int in return Int(value)!})
arr.sort()
return String(arr[0]) + " " + String(arr[arr.count - 1])
}
์ด ๋ถ์ ๋์ ๋ฌ๋ฆฌ ๋ฐฐ์ด์ ์ ๋ ฌํด์ ๊ฐ์ฅ ์์ ๋ฐฐ์ด๊ณผ ๊ฐ์ฅ ๋ท ๋ฐฐ์ด์ ๊บผ๋๋ค. ์.. ๋๋ผ๋ฉด arr.first ๋ arr.last ์ผ์ ๋ฏ!
๊ทธ๋ผ ์คํ ์๊ฐ์ ๋น๊ตํด๋ณด์.
min๊ณผ max ํจ์๋ ์๊ฐ ๋ณต์ก๋๊ฐ ๊ฐ๊ฐ O(N)์ด๋ค. ๊ทธ๋ผ sort()๋? ์๊ฐ ๋ณต์ก๋๊ฐ O(N logN) ์ด๋ค. arr.first ์ arr.last ๊ฐ ๊ฐ๊ฐ ์๊ฐ ๋ณต์ก๋๊ฐ O(1) ์ด๋ ๋์ ํ์ด์ ์๊ฐ ๋ณต์ก๋๋ O(2N) ์ด๊ณ , ๋ค๋ฅธ ์ฌ๋์ ์๊ฐ ๋ณต์ก๋๋ O(N logN+2) ์ด๋ค. ๊ทธ๋ฌ๋ ์๋์ ํ์ด๊ฐ ๋ ๋น ๋ฅธ ๊ฒ! min ํ๋๋ง ์ฌ์ฉํ๋ค๋ฉด ๋ด๊ฐ ๋ ๋น ๋ฅด๊ฒ ์ง๋ง, ๋๋ ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ์ถ๋ ฅํด์ผํ๊ธฐ ๋๋ฌธ์ ๋ ํจ์๋ฅผ ๋ฐ๋ก ์ฌ์ฉํ๋ค. ๊ทธ๋ฌ๋ ์๊ฐ ๋ณต์ก๋๊ฐ 2๋ฐฐ๊ฐ ๋ ๊ฒ! ๋ค์์ ์ต๋๊ฐ ์ต์๊ฐ์ ๋์์ ์ฌ์ฉํด์ผํ ์ผ์ด ์๋ค๋ฉด sort() ํจ์๋ฅผ ์ฌ์ฉํด์ผ๊ฒ ๋ค.