โซ๏ธ ๋ฌธ์
https://www.acmicpc.net/problem/1744
โซ๏ธ ๋์ ํ์ด
ํ์ด ๋ฐฉ์์ ๋ฐ๋ก ์๊ฐ๋ฌ๋ค. ํต์ฌ์ -๋ -๋ผ๋ฆฌ ๊ณฑํ์ ๋ ์์๊ฐ ๋๊ณ , 0์ด ์ ๋ ฅ๋๋ ๊ฒฝ์ฐ minus์ธ ์๋ ๊ณฑํด์ฃผ๋ฉด ๊ฐ์ด๋์ด๋ผ๋ ์ฌ์ค!
- input์ minus์ 0, plus๋ก ๋๋ ์ ๋ฐ์๊ณ , ๋ฐฐ์ด์ ๋ฐ๋ก ๋ง๋ค์ด์ฃผ์๋ค.
- ์ฐ์ ์๋ฅผ ๊ณฑํด์ฃผ๋๊ฒ ๊ทธ๋ฅ ๋ํด์ฃผ๋ ๊ฒ๋ณด๋ค๋ ํจ์ฌ ์ด๋์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก, ์ฃผ์ด์ง input์ ๊ฐ์๊ฐ ํ์์ธ ๊ฒฝ์ฐ, ํฐ์๋ค์ ๋ฌถ์ด์ ์ต๋ ์๋ก ๋ง๋ค์ด์ฃผ๊ณ ์ ์ผ ์์์๋ง ๋จ์ผ๋ก ๋ํด์ฃผ์.
- minus๋ ๊ทธ ๋ฐ๋, ์ ์ผ ์์์ ๋๊ฐ๋ฅผ ๋ฌถ์ด์ ์ต๋์์๋ก ๋ง๋ค์ด์ฃผ๊ณ , ๋ง์ฝ ํ์์ธ๊ฒฝ์ฐ ์ ์ผ ํฐ์๋ฅผ ๊ทธ๋ฅ ๋จ์ผ๋ก ๋ํด์ฃผ์.
์ด ๊ณผ์ ์ ๊ทธ๋๋ก ์ฝ๋๋ก ๋ง๋ค์ด์ฃผ๋ฉด ? ์๋์ ๊ฐ์ ์ฝ๋๊ฐ ๋์จ๋ค.
โ 1์ฐจ์๋ - ํ๋ ธ์ต๋๋ค.
import Foundation
private func solution() -> Int {
let n = Int(readLine()!)!
var minusNums = [Int]()
var plusNums = [Int]()
for _ in 0..<n {
let input = Int(readLine()!)!
// 0 ์ด๋ฉด ๋ง์ด๋์ค๋ ๊ณฑํด์ฃผ๋๊ฒ ๊ฐ์ด๋
if input <= 0 {
minusNums.append(input)
} else {
plusNums.append(input)
}
}
var sum = 0
minusNums = minusNums.sorted(by: <)
plusNums = plusNums.sorted(by: >)
var idx = 0
while idx < minusNums.count {
if idx + 1 < minusNums.count {
sum += minusNums[idx] * minusNums[idx+1]
} else if idx + 1 >= minusNums.count {
sum += minusNums[idx]
}
idx += 2
}
idx = 0
while idx < plusNums.count {
if idx + 1 < plusNums.count {
sum += plusNums[idx] * plusNums[idx+1]
} else if idx + 1 >= plusNums.count {
sum += plusNums[idx]
}
idx += 2
}
return sum
}
print(solution())
ํ ,, ํ๋ ธ๋ค. ์ํ๋ ๋ต์ด ์ถ๋ ฅ๋์ง ์๋ ๋ชจ์์ด๋ค.
๋ค์๋ ... 2์ฐจ์๋ - ๋ง์์ต๋๋ค!
์๋ ์ด์ ์ ๊ณต์ฃผ๋ ๋ฌธ์ ๋ ๊ทธ๋ฌ๋ฏ, ์ฝ๋ฉํ ์คํธ๊ฐ ์ํ๋ฆฌ๊ณ ๋ต๋ตํ๊ณ ๋ชจ๋ฅด๊ฒ ์ผ๋ฉด ๋ค์๋ ํธ๋๊ฒ๋ ํ๋์ ๋ฐฉ๋ฒ์ธ๊ฒ๊ฐ๋ค. ๋ฌธ์ ์ ๋ํ ๊ณ ๋ฏผ์ ๊น๊ฒํ ํฐ๋ผ ๋ฌธ์ ๋ฅผ ๊น๋จน์ง ์์ํ ๊ณ , ์กฐ๊ธ ๋ ๋จธ๋ฆฌ๊ฐ ๊ฐ๋ฒผ์์ง ์ํ์์ ์๊ฐํ ์ ์๊ธฐ ๋๋ฌธ?? ์ด๋ ๊ฒ ๋ฌธ์ ์ํ๋ฆฌ๋ฉด ์์ผ๋ก ๋ค์๋ ๋ก ๋ฏธ๋ค๋ด์ผ๊ฒ ๋ค ^0^/
๊ทธ๋์ ์ด๋ฒ ๋ฌธ์ ๋ ๋ณด์๋ง์ ํ๋ฆฐ ๋ถ๋ถ์ ๋ฐ๋ก ํ์ ํ๋ค. 0์ ๋ง์ด๋์ค๋ฌ๋ฆฐ ๋์๊ฒ ๊ณฑํด์ฃผ๋ฉด 0์ด ๋์ด๋ฒ๋ ค์ ์ด๋์ด๋ค. ํ์ง๋ง 1์? 1์ ์๋ฅผ ๋ฌถ์ด์ฃผ๊ธฐ๋ณด๋ค๋, ๋ฐ๋ก ๋ํด์ฃผ๋๊ฒ ๊ฐ์ฅ ์ต๋์ ๊ฐ์ผ๋ก ๋ง๋ค ์ ์๋ค. ๋ฐ๋ผ์,,,, ํ์ฌ ๋ด๊ฐ ๊ทธ๋ฅ ์จ๋จ๋ ์ฝ๋๋ 1๋ ๋ชจ๋ ๊ณฑํด์ฃผ๋ ๊ตฌ์กฐ๋ก ๋์ด์๊ธฐ ๋๋ฌธ์, ์ค๋ต์ด์๋ ๊ฒ์ด๋ค. ์ง๊ธ ๋ด๊ฐ ์จ๋จ๋ ํ์ด๋ฅผ ๊ทธ๋๋ก ์ ์งํ๊ณ , ์ถ๊ฐ๋ก 1์ ๋ฐ๋ก ์ฒ๋ฆฌํด์ฃผ๋ฉด์ ๋ํด์ฃผ๋ฉด ์ต๋๋ฅผ ๊ตฌํ ์ ์๋ค.
import Foundation
private func solution() -> Int {
let n = Int(readLine()!)!
var minusNums = [Int]()
var plusNums = [Int]()
var ones = [Int]()
for _ in 0..<n {
let input = Int(readLine()!)!
// 0 ์ด๋ฉด ๋ง์ด๋์ค๋ ๊ณฑํด์ฃผ๋๊ฒ ๊ฐ์ด๋
if input <= 0 {
minusNums.append(input)
} else if input == 1 {
// 1์ ๊ทธ๋ฅ ๋ํด์ฃผ๋๊ฒ ๊ฐ์ด๋
ones.append(input)
} else {
plusNums.append(input)
}
}
var sum = 0
minusNums = minusNums.sorted(by: <)
plusNums = plusNums.sorted(by: >)
// minus ์ฒ๋ฆฌ
var idx = 0
while idx < minusNums.count {
if idx + 1 < minusNums.count {
sum += minusNums[idx] * minusNums[idx+1]
} else if idx + 1 >= minusNums.count {
sum += minusNums[idx]
}
idx += 2
}
// plus ์ฒ๋ฆฌ
idx = 0
while idx < plusNums.count {
if idx + 1 < plusNums.count {
sum += plusNums[idx] * plusNums[idx+1]
} else if idx + 1 >= plusNums.count {
sum += plusNums[idx]
}
idx += 2
}
// 1์ ๋ฐ๋ก ๋ํด์ฃผ๊ธฐ~
return sum + ones.count
}
print(solution())
์ฐ์์~~ ๋น๊ต์ ๊ฐ๋จํ๊ฒ ๊ณจ๋ ๋ฌธ์ ํด๊ฒฐ!