* 알고리즘 너무 약해서 기초 문제 50개 목표로 푸는 중...
* 3시간 안에 답을 내지 못하면 답지를 보고 30분 내로 정답 판정을 받고, 3일 뒤 다시 풀어보기
Greedy
3 / 50(NEW!)
탐색
2 / 50
기초 동적 프로그래밍
3 / 50
투포인터
0 / 10
문제
→ solved.ac 기준 실버 4
문제 해결 아이디어
가장 먼저 떠오르는 브루트포스
→ 30의 배수가 되는 가장 큰 수
→ 각 숫자를 섞어서 30의 배수가 되도록 해야 함
→ for문으로 모든 숫자를 뽑아서 30의 배수가 있는지 확인한다
→ 근데 N이 10000이라서 시간 초과
그 외에는 그리디를 생각해야 함
→ 30의 배수이므로 늘 마지막 숫자는 0
→ 문제의 출력 예시를 보니 일정한 패턴이 존재함
→ 30의 배수가 있는 경우: N으로 할 수 있는 가장 큰 숫자가 늘 답
그 외: -1
→ 30의 배수 몇 가지를 가지고 순서를 뒤집어도 30의 배수임을 확인
구현
내 풀이
import sys
input = sys.stdin.readline
n = list(input().strip('\n'))
n.sort(reverse=True)
max_number = int(''.join(n))
if (max_number % 30 == 0) :
print(max_number)
else:
print(-1)
메모
- 걸린 시간 : 15분
- 다른 사람 풀이는 대부분 이렇다.
- n의 마지막이 0이 되는지 확인한다.
- 대부분 n의 각 자리수를 합했을 때 3의 배수가 되는지 확인한다
- 근데 결과적으로는 else해서 sort한 값을 더해주는 것 같아서 똑같음.
- N이 0으로 끝나고, N의 모든 자릿수의 합이 3의 배수라면 30의 배수라는 걸 알았다.
마치며
뭐지뭐지뭐지..?!! 하면서 푼 문제
그리고 드디어 골드 5가 되었따(다만 푼 문제가 대부분 실버문제라는 게 흠)
'Algorithm' 카테고리의 다른 글
[알고리즘] BOJ 2606번 - 바이러스(python3) (0) | 2023.05.24 |
---|---|
[알고리즘] BOJ 9465번 - 스티커(python3) (0) | 2023.05.23 |
[알고리즘] BOJ 9461번 - 파도반 수열(python3) (0) | 2023.05.21 |
[알고리즘] BOJ 11403번 - 경로 찾기(python3) (1) | 2023.05.21 |
[알고리즘] BOJ 11660 - 구간 합 구하기 5(python3) (0) | 2023.05.18 |