-
10610. [Python]30Python_알고리즘/Silver IV 2023. 1. 31. 23:52
1. 문제
https://www.acmicpc.net/problem/10610
10610번: 30
어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한
www.acmicpc.net
2. 접근 방법
- 시간 제한: 1초
- 메모리 제한: 256MB
- 문자열 정렬
- 조건
3. 파이썬 코드
N = input() # 숫자를 담을 리스트 생성 num_list = [] # 30으로 나눠야기 때문에 3의 배수인지 확인하는 변수 생성 total = 0 # 정답 출력할 문자 변수 선언 ans = "" # 30의 배수이므로 30보다 작으면 -1 출력 if int(N) < 30: print(-1) else: # input으로 받은 N 반복문 돌리는 과정 for i in N: # total 이라는 값에 변수 더해나가고 리스트에 값 추가 total += int(i) num_list.append(i) # 리스트 값을 내림차순 정렬 num_list.sort(reverse=True) # 30의 배수가 될려면 맨 마지막자리에 0이 들어가야 하므로 조건식 생성 if num_list[-1] != "0": print(-1) else: # 0이 끝자리에 존재할 경우 3의 배수인지 체크 if total % 3 != 0: print(-1) else: for k in num_list: ans += k print(ans)
4. 문제를 풀고난 후 생각
- 문제를 읽고 배수중 가장 큰 수를 나타내는 방법을 먼저 생각해봤다.
- 가장 큰수를 가져올려면 높은숫자부터 낮은숫자로 내림차순으로 내려갈때 가장 값이 커지는 것을 알았고 문자열로 값들을 내림차순 정렬한 후 나머지 조건들을 생각했다.
- 30의 배수이기 때문에 맨 마지막 자리가 0 이되어야 하는 조건이 있어야 했고, 이 조건을 통과하면 3의 배수여야 하는 조건을 체크해주면 된다고 생각했다.
- 3의 배수의 조건은 각 자리 숫자의 합을 3으로 나눴을 경우 나머지 값이 없으면 3의 배수가 된다.
- 위의 두 조건을 거치고 모두 만족하면 리스트를 문자열 합치기를 통해서 출력해준다.
5. 문제를 푸는데 도움이 되는 지식
- 수학(3의 배수의 조건)
- 문자열 정렬
'Python_알고리즘 > Silver IV' 카테고리의 다른 글
1235. [Python]학생 번호 (0) 2023.04.01 2578. [Python]빙고 (0) 2023.02.05 1789. [Python]수들의 합 (0) 2023.01.30 11047. [Python]동전 0 (0) 2023.01.30 2217. [Python]로프 (0) 2023.01.29