https://www.acmicpc.net/problem/10610
10610번: 30
어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한
www.acmicpc.net
첫 시도 - 메모리 초과
'''
10610번: 30 / silver 4 /
'''
import itertools
# 1. n 입력 받기
n = input()
# 2. 각 숫자 arr 리스트에 넣고, 내림차순 정렬하기
arr = []
for v in n:
arr.append(v)
arr.sort(reverse=True)
# 3. 30 배수 찾기
# 3-1. 0이 없으면 -1
if arr.pop() != '0':
print(-1)
else:
flag = True
case = list(itertools.permutations(arr, len(arr)))
for v in case:
tmp = ''
for i in v:
tmp += i
if int(tmp) % 3 == 0:
print(tmp + '0')
flag = False
break
if flag:
print(-1)
정답 코드
'''
10610번: 30 / silver 4 / 정렬, 수학
'''
# 1. n 입력 받고, 내림차순
n = list(input())
n.sort(reverse=True)
# 2. 30 배수 확인
n_sum = 0
for v in n:
if v == '0':
break
n_sum += int(v)
if n[-1] != '0' or n_sum % 3 != 0:
print(-1)
else:
for i in n:
print(i, end='')
3의 배수 판정을 이해 해야 풀 수 있는 문제
3의 배수 판정: 각 자리 수의 합이 3의 배수인 수이다.
처음 짠 코드는 3의 배수 판정 조건을 몰라서 모두 하나씩 집어 넣어서 3의 배수인지 확인을 했다.
'백준 문제풀이' 카테고리의 다른 글
11729번: 하노이 탑 이동 순서 / silver 1 / 재귀 (0) | 2023.03.28 |
---|---|
6603번: 로또 / silver 2 / 조합 (0) | 2023.03.27 |
2217번: 로프 / silver 4 / 그리디, 정렬 (0) | 2023.03.24 |
1158번: 요세푸스 문제 / silver 4 / 큐 (0) | 2023.03.23 |
1065번: 한수 / silver 4 / 브루트포스 (0) | 2023.03.22 |