Swift ์คํฐ๋ 10์ฃผ์ฐจ 6/24
์คํฐ๋ 4์ฃผ์ฐจ ์ฑํฐ์๋ "์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ" ์์ ์ฝ์ ์ ๋ ฌ, ๋ณํฉ ์ ๋ ฌ, ํต ์ ๋ ฌ์ ๋ํด ํ์ตํ์์ต๋๋ค. ์ด์ ๊ด๋ จ๋์ ํ๋ก๊ทธ๋๋จธ์ค์ ์ ๋ ฌ ์ฑํฐ๋ฅผ ํตํด ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด๋ฅผ ์งํํ์ต๋๋ค.
โ๏ธ K๋ฒ์งธ์
๋ฐฐ์ด array์ i๋ฒ์งธ ์ซ์๋ถํฐ j๋ฒ์งธ ์ซ์๊น์ง ์๋ฅด๊ณ ์ ๋ ฌํ์ ๋, k๋ฒ์งธ์ ์๋ ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
๐ ์ ์ถ๋ ฅ
- array : Int ๋ฐฐ์ด, 1 <= ๋ฐฐ์ด์๊ธธ์ด <= 100
- commands : [i, j, k] ๋ฅผ ์์๋ก ๊ฐ๋ 2์ฐจ์ ๋ฐฐ์ด, 1 <= ๋ฐฐ์ด์๊ธธ์ด <= 50
- return : commands ์ ๋ง๋ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐฐ์ด๋ก ๋ด์ ๋ฆฌํดํ๋ค.
๐ก ํ์ด๋ฐฉ๋ฒ
- ๊ฐ command ๋ง๋ค array ๋ฐฐ์ด์ i ~ j ๊น์ง์ ๋ถ๋ถ ๋ฐฐ์ด์ ์๋ธ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ๊ตฌํ๋ค.
- ๋ถ๋ถ ๋ฐฐ์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ณ , k๋ฒ์งธ ์๋ฅผ ์ ๋ต ๋ฐฐ์ด์ ์ถ๊ฐํ๊ณ , ์ ๋ต ๋ฐฐ์ด์ ๋ฐํํ๋ค.
- array ๋ฐฐ์ด์ ์ธ๋ฑ์ค๊ฐ 0๋ถํฐ ์์, i, j, k ๋ ์ธ๋ฑ์ค๊ฐ 1 ๋ถํฐ ์์ํ๋ค๋ ์ฐจ์ด๋ง ์ ํ์ธํ๋ฉด ๋๋ค.
ํ์ด1 - for ๋ฌธ ์ด์ฉ
func solution(_ array:[Int], _ commands:[[Int]]) -> [Int] {
var answer = [Int]()
for command in commands {
let i = command[0], j = command[1], k = command[2]
answer.append(array[i-1...j-1].sorted()[k-1])
}
return answer
}
ํ์ด2 - map ํจ์ ์ด์ฉ
ํ์ด1์์์ command = $0 ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. $0 ์ ์์๊ฐ 3๊ฐ์ธ ์ผ์ฐจ์๋ฐฐ์ด์ธ ๊ฒ์ด๋ค.
func solution(_ array:[Int], _ commands:[[Int]]) -> [Int] {
return commands.map { array[$0[0]-1...$0[1]-1].sorted()[$0[2]-1] }
}
โ๏ธ ๊ฐ์ฅ ํฐ ์
0 ๋๋ ์์ ์ ์๊ฐ ์ฃผ์ด์ก์ ๋, ์ ์๋ฅผ ์ด์ด ๋ถ์ฌ ๋ง๋ค ์ ์๋ ๊ฐ์ฅ ํฐ ์๋ฅผ ์์๋ด๋ ๋ฌธ์ ์ด๋ค.
๐ ์ ์ถ๋ ฅ
- numbers : ์ ์๋ก ์ด๋ฃจ์ด์ง 1์ฐจ์ ๋ฐฐ์ด, 0 <= ๋ฐฐ์ด์ ๊ธธ์ด <= 1,000
- return : numbers ๋ฐฐ์ด์ ์ ์๋ฅผ ์ด์ด ๋ถ์ฌ ๋ง๋ค ์ ์๋ ๊ฐ์ฅ ํฐ ์๋ฅผ ๋ฐํํ๋ค.
๐ก ํ์ด ๋ฐฉ๋ฒ
- ์ ์๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํด์, ์ด์ด ๋ถ์์ ๋ ๋ ํฐ ์๊ฐ ๋๋๋ก ์ ๋ ฌํ๋ค.
- sort(by:) ํจ์๋ฅผ ์ด์ฉํด์ ๋ฌธ์์ด์ ํฉ์ผ๋ก ์ด์ ๊ฐ+๋ค์๊ฐ / ๋ค์๊ฐ+์ด์ ๊ฐ ์ ๋น๊ตํด ์ ๋ ฌํ๋ค.
- ์๋ฅผ ๋ค๋ฉด, [33, 30] -> '33'+'30' = '3330' > '30+'33' = '3033' ์ด๋ฏ๋ก '33', '30' ์์๋ก ์ ๋ ฌ๋๋ค.
- ์์ธ ์ฒ๋ฆฌ :: [0, 0, 0] -> '000' ์ผ๋ก ์ ๋ต์ 0์ด ๋์ด์ผํ๋ฏ๋ก ๋ณ๋๋ก ์์ธ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ด์ผํ๋ค.
ํ์ด1 - sort, reduce, if-else ํ์ฉ
func solution(_ numbers:[Int]) -> String {
var stringNumbers: [String] = numbers.map { String($0) }
stringNumbers.sort { prev, next in
let first = prev + next
let second = next + prev
return first > second
}
let answer = stringNumbers.reduce("", +)
if answer.first! == "0" {
return "0"
} else {
return answer
}
}
ํ์ด2 - sorted ์ถ์ฝ, joined, ์ผํญ์ฐ์ฐ์ ํ์ฉ
func solution(_ numbers:[Int]) -> String {
let stringNumbers: [String] = numbers.map { String($0) }
let answer = stringNumbers.sorted { return $0+$1 > $1+$0 }.joined()
return answer.first! == "0" ? "0" : answer
}
โ๏ธ H-Index
์ด๋ค ๊ณผํ์๊ฐ ๋ฐํํ ๋ ผ๋ฌธ nํธ ์ค, h๋ฒ ์ด์ ์ธ์ฉ๋ ๋ ผ๋ฌธ์ด hํธ ์ด์์ด๊ณ ๋๋จธ์ง ๋ ผ๋ฌธ์ด h๋ฒ ์ดํ ์ธ์ฉ๋์๋ค๋ฉด h์ ์ต๋๊ฐ์ด ์ด ๊ณผํ์์ H-Index์ ๋๋ค.
๐ ์ ์ถ๋ ฅ
- citations : ์ด๋ค ๊ณผํ์๊ฐ ๋ฐํํ ๋ ผ๋ฌธ์ ์ธ์ฉ ํ์๋ฅผ ๋ด์ ๋ฐฐ์ด
- return : ์ด ๊ณผํ์์ H-Index
๐ก ์ฒซ๋ฒ์งธ ํ์ด
- ๋ฌธ์ ์ ์จ์ ธ์๋ ๋๋ก ํ์ ๋ฐฉ๋ฒ. (ํ์ด2๋ณด๋ค ์๊ฐํจ์จ์ด ์์ข๋ค)!
- h ๋ฅผ 0๋ถํฐ ๋ ผ๋ฌธ์ ๊ฐ์๊น์ง ์ฆ๊ฐํ๋ฉด์ h๋ฒ ์ด์ ์ธ์ฉ๋ ๋ ผ๋ฌธ์ด hํธ ์ด์์ธ์ง ํ์ธํ๋ฉฐ ์ต๋๊ฐ์ ๊ตฌํ๋ค.
func solution(_ citations:[Int]) -> Int {
var hIndex = 0
while hIndex <= citations.count {
let count = citations.filter { $0 >= hIndex }.count
if count < hIndex { break }
hIndex += 1
}
return hIndex - 1
}
๐ก ๋๋ฒ์งธ ํ์ด
- ๋ ผ๋ฌธ์ ์ธ์ฉ ํ์ ๋ฐฐ์ด์ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ๋ค. * citations ๋ ํจ์์ธ์๋ผ ์์์ด๋ฏ๋ก sorted ํจ์๋ฅผ ํตํด return ๊ฐ์ ์ด์ฉํ๋ค.
- h ๋ฅผ 0๋ถํฐ ๋ ผ๋ฌธ์ ๊ฐ์๊น์ง ์ฆ๊ฐํ๋ฉด์ h ๋ฒ์งธ ๋ ผ๋ฌธ์ ์ธ์ฉ ํ์์ ๋น๊ตํ๋ค.
- ์ฒ์์ผ๋ก ๋ํ๋ h ๋ฒ์งธ ๋ ผ๋ฌธ์ ์ธ์ฉ ํ์๊ฐ h ์ด์์ผ ๋๊ฐ h์ ์ต๋๊ฐ์ผ๋ก, H-Index ๊ฐ ๋์ด ๋ฐํํ๋ค.
- h ๋ฅผ ์ ๋ถ ๋ฐ๋ณตํ ๊ฒฝ์ฐ, H-Index ๋ ๋ ผ๋ฌธ์ ๊ฐ์์ ๊ฐ์์ง๊ฒ ๋๋ค.
func solution(_ citations:[Int]) -> Int {
let citations = citations.sorted(by: >)
for hIndex in 0..<citations.count {
if hIndex >= citations[hIndex] {
return hIndex
}
}
return citations.count
}
ํ์ด1๊ณผ ํ์ด2 ์์ธํ ๊ณผ์ (๋๋ณด๊ธฐ)
citations = [3, 0, 6, 1, 5]
์ ๋ ฌx
h = 0 -> h ์ด์ 5 >= 0
h = 1 -> h ์ด์ 4 >= 1
h = 2 -> h ์ด์ 3 >= 2
h = 3 -> h ์ด์ 3 >= 3
h = 4 -> h ์ด์ 2 >= 4 x --> H-Index = 4-1 = 3
์ ๋ ฌ = [6, 5, 3, 1, 0]
h = 0 -> 0 >= 6 x
h = 1 -> 1 >= 5 x
h = 2 -> 2 >= 3 x
h = 3 -> 3 >= 3 o --> H-Index = 3
๐ค ํ์ด1๊ณผ ํ์ด2์ ์๊ฐ๋ณต์ก๋ ๋น๊ต * ์ ๋ ฌ์ ํ์์ฑ !!
๐ ์ค๋ ์คํฐ๋์ ๋ฆฌ๋ทฐ
- ๋ค๋ฅธ ์คํฐ๋์ ๋ถ๋ค์ ์ฝ๋๋ฅผ ๋ณด๊ณ , ๊ฐ์ ์ธ์ด๋ก ์ข ๋ ๊ฐ๊ฒฐํ ์ฝ๋๋ฅผ ๊ณ ๋ฏผํด๋ณผ ์ ์์๋ค.
- map, sort, sorted ํจ์์ closure ๋ฅผ ์ ํ์ฉํ์!
- [string].joined() ๋ฅผ ํตํด ํ๋์ ๋ฌธ์์ด๋ก ๋ง๋ค ์ ์๋ค.
- ๊นจ์๋ฌธ๋ฒ :: array.sort() ๋ ๋ฆฌํด๊ฐ ์์ด array ์์๋ฅผ ์ ๋ฐ์ดํธ, array.sorted() ๋ ์ ๋ ฌ๋ ๋ฐฐ์ด์ ๋ฐํํ๋ค.
๐ ์ฐธ๊ณ ๋งํฌ
- ๊ฐ์ฅ ํฐ ์ ์ฐธ๊ณ ํ์ด
- git hub ์ฝ๋