반응형
안녕하세요. 개발 중인 정주입니다.
오늘은 "백준 BOJ - 10610 30" 문제를 풀었습니다.
Github
문제 링크
풀이
이번 문제는 무슨 분류인지 잘 모르겠네요.
분류는 그리디로 되어 있는데 저는 문자열과 30의 배수 특징을 이용해 풀었습니다.
30의 배수 특징은 두 가지가 있습니다.
1. 1의 자리가 0으로 끝난다.
2. 모든 자릿수의 합이 3, 6, 9 즉 3의 배수이다.
이 규칙은 30, 60, 90, 120, 180, 210... 까지 직접 써보면서 발견했습니다.
이래서 공책은 필수라고 말하나봅니다.
아무튼 input을 문자열로 처리한 후 내림차순으로 정렬합니다.
그 후 마지막이 0으로 끝나는지, 모든 자리의 합이 3의 배수인지 확인합니다.
위 두 가지 조건 중 하나라도 만족을 안 하면 -1을 출력합니다.
두 가지 조건 모두 충족한다면 내림차순 정렬한 문자열을 출력합니다.
전체 코드
//10610 30
import Foundation
var input = Array(readLine()!).sorted(by: >)
let sum = input.reduce(0) { $0 + Int(String($1))! }
if input.last! != Character("0") || sum % 3 != 0 {
print("-1")
} else {
print(String(input))
}
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.
반응형