728x90
이 문제는 어떻게 그리디로 풀어야할지 아예 모르겠다... ㅋㅋㅋㅋ
그냥 3의 배수의 특징 -> 모든 위치의 값들을 합쳤을 때 3, 6, 9가 나온다는 개념이 있어서 이를 적용했고
30의 배수여야하기 때문에 무조건 0이 마지막 자리에 나와야한다는 것을 이용했다.
이 문제를 풀면서 생각한 논리적 흐름은
- 입력값을 Int로 변환해준다.
- 만약 배열에 0이 없다면 뒤도 볼 것 없이 -1을 print해준다.
- 0이 들어갔다면 이제 input 배열의 각 자리 값들을 더했을 때 3, 6, 9.. 즉 3의 배수인지 아닌지 확인하고 아니라면 -1 print
- 3의 배수라면 input 배열을 큰 수로 순서대로 바꾸고 자릿수끼리 연결해준다.
* 1449번
import Foundation
let input = readLine()!.map {Int(String($0))!}
if input.contains(0) {
let sum = input.reduce(0, +)
if sum % 3 != 0 {
print(-1)
} else {
let sortedInput = input.sorted(by: >)
print(sortedInput.map{String($0)}.reduce("", +))
}
} else {
print(-1)
}
정리(Today I Learned)
- 없음
'TIL > 알고리즘 공부' 카테고리의 다른 글
백준 1931번 Swift 알고리즘 연습 - 회의실 배정_그리디 (0) | 2023.02.06 |
---|---|
백준 1541번 Swift 알고리즘 연습 - 잃어버린 괄호_그리디 (0) | 2023.02.06 |
백준 1449번 Swift 알고리즘 연습 - 수리공 항승_그리디 (0) | 2023.02.04 |
백준 4796번 Swift 알고리즘 연습 - 캠핑_그리디 (0) | 2023.02.04 |
프로그래머스 Lv. 1 Swift 알고리즘 - 체육복_그리디 (0) | 2023.02.02 |