BOJ-1744, 수 묶기
문제 📑
https://www.acmicpc.net/problem/1744
문제 정리 ▾
- 수들의 개수를 입력받는다.
- 수들은 각각 개행으로 입력받는다.
- 각각의 수들을 둘씩 묶거나, 아니면 묶지 않아야 한다.
- 위 연산을 통해 입력받은 수들로 최댓값을 출력시킨다.
접근 🚶🏻
나의 생각 ▾
- 이 문제는 케이스를 나누는 것이 중요하다고 생각했다.
- 케이스는 아래와 같이 나눌 수 있다.
- 양수일 때 (N > 1)
- 1일 때
- 음수일 때 (0 포함)
내 코드 ▾
import Foundation
func solution() {
var plus = [Int]()
var minus = [Int]()
var result: Int = 0
for _ in 0..<Int(readLine()!)! {
let input = Int(readLine()!)!
if input > 1 { plus.append(input) }
else if input == 1 { result += 1}
else { minus.append(input) }
}
plus.sort(by: > )
minus.sort(by: < )
if plus.count % 2 == 1 { result += plus.removeLast() }
if minus.count % 2 == 1 { result += minus.removeLast() }
while plus.count > 0 || minus.count > 0 {
if plus.count > 0 { result += plus.removeLast() * plus.removeLast() }
if minus.count > 0 { result += minus.removeLast() * minus.removeLast() }
}
print(result)
}
solution()
- 여기서 포인트는 양수는 큰 순으로, 음수는 작은 순으로 정렬하는 것이다.
- 음수는 무조건 절댓값이 큰 값끼리 곱해야 최댓값을 도출할 수 있다.
- 1은 무조건 더해줘야 더 커지기 때문에 받는 즉시 1을 누적시켜주었다.
Addtional 📂
- 결론적으로 곱해야 하는 두 수를 묶어주는 게 중요했는데 어떻게 묶어줘야 할지 머리가 잘 안 굴러갔다..
- 아직도 많이 부족하다고 느끼게 해 준 고마운 문제였다 😅
'Algorithm.zip' 카테고리의 다른 글
[Swift]BOJ-3190 (0) | 2022.07.12 |
---|---|
[Swift]BOJ-3085 (0) | 2022.07.12 |
[Swift]BOJ-16953 (0) | 2022.04.06 |
[Swift]BOJ-1946 (0) | 2022.04.06 |
[Swift]BOJ-1026 (0) | 2022.04.04 |