코딩/백준

[백준/파이썬/수학] 10610번 30 코딩테스트 연습풀이 실버5

thisisjade 2022. 3. 14. 22:43
728x90

문제 출처: https://www.acmicpc.net/problem/10610

 

10610번: 30

어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한

www.acmicpc.net

 

문제

어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한다.

미르코를 도와 그가 만들고 싶어하는 수를 계산하는 프로그램을 작성하라.

 

입력

N을 입력받는다. N는 최대 105개의 숫자로 구성되어 있으며, 0으로 시작하지 않는다.

 

출력

미르코가 만들고 싶어하는 수가 존재한다면 그 수를 출력하라. 그 수가 존재하지 않는다면, -1을 출력하라.

 

예제 입력 1

30

 

예제 출력 1

30

 

예제 입력 2

102

 

예제 출력 2

210

 

예제 입력 3

2931

 

예제 출력 3

-1

 

예제 입력 4

80875542

 

예제 출력 4

88755420

 

정답

tmp = str(input())
tmp = sorted(tmp, reverse= True)
sum = 0

if '0' not in tmp:
    print(-1)
else:
    for i in tmp:
        sum += int(i)
    if sum%3 !=0:
        print(-1)
    else:
        print("".join(tmp))

문제 풀이 방법

1. tmp에 값을 받아와서 최대의 수가 나오게 정렬

2. if문을 통해 문자열0이 없을 경우 -1을 출력

3. for문을 통해 모든수를 sum에 더해줍니다 30의 배수가 자리수를 3배수가 되고 맨 끝 자리가 0일경우 30의 배수가 됩니다.

4. if문을 통해 sum%3이 0이 아닐경우 -1을 출력합니다.

5. else문을 통해 join으로 tmp를 출력

 

728x90