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)'Algorithm_PYTHON' 카테고리의 다른 글
| [백준_파이썬]11655_ROT13 (0) | 2021.09.15 |
|---|---|
| [백준_파이썬]1357_뒤집힌 덧셈 (0) | 2021.09.15 |
| [백준_파이썬]1259_팰린드롬수 (0) | 2021.09.11 |
| [백준_파이썬]2570번_계단 오르기 (0) | 2021.08.28 |
| [백준_파이썬]1463번_1로 만들기 (0) | 2021.08.28 |