본문 바로가기
Algorithm_PYTHON

[백준_파이썬]10610_30

by 코리니덕 2021. 9. 11.

https://www.acmicpc.net/problem/10610

 

10610번: 30

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

www.acmicpc.net

 

내 풀이1

n = list(input())
n.sort(reverse=True) # 제일 큰 수를 얻으려면 역으로 정렬

wannaN = int("".join(n))
if wannaN % 30 == 0:
    print(wannaN)
else:
    print(-1)

 

내 풀이2

- 만약, n을 list로 받을게 아니면 sorted()사용해야함

- sort()는 문자열에서 사용할 수 없기 때문

n = input()
# 제일 큰 수를 얻으려면 역으로 정렬
n = sorted(n, reverse=True)

# 역으로 만든 수를 하나로 합친 후에 int형으로 바꿔줌
wannaN = int("".join(n))
if wannaN % 30 == 0: # 30으로 나눠지면 출력
    print(wannaN)
else: # 아니면 -1
    print(-1)

 

다른 사람 풀이

- 이렇게 푸니까 거의 반이상 시간 절약이 되었다

- 시간복잡도 생각하는게 왤케 어렵즤

# 각 자릿수를 다 더한 결과가 3의 배수면 그 수는 3의 배수

# 30의 배수가 되려면 마지막 수는 0으로 끝나야 함

n = list(input())
n.sort(reverse=True)

# 각 자릿수를 더할 변수
sum = 0
for i in n:
    sum += int(i)

# 3의 배수면서 0이 들어가있으면 30의 배수라고 판단
if(sum % 3 == 0 and "0" in n):
    print("".join(n))
else:
    print(-1)