TIL/알고리즘 공부

백준 10610번 Swift 알고리즘 연습 - 30_그리디

여의도사노비 2023. 2. 4. 21:22
728x90

이 문제는 어떻게 그리디로 풀어야할지 아예 모르겠다... ㅋㅋㅋㅋ

그냥 3의 배수의 특징 -> 모든 위치의 값들을 합쳤을 때 3, 6, 9가 나온다는 개념이 있어서 이를 적용했고

30의 배수여야하기 때문에 무조건 0이 마지막 자리에 나와야한다는 것을 이용했다.

 

 

이 문제를 풀면서 생각한 논리적 흐름은

  1. 입력값을 Int로 변환해준다.
  2. 만약 배열에 0이 없다면 뒤도 볼 것 없이 -1을 print해준다.
  3. 0이 들어갔다면 이제 input 배열의 각 자리 값들을 더했을 때 3, 6, 9.. 즉 3의 배수인지 아닌지 확인하고 아니라면 -1 print
  4. 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)

  1. 없음