티스토리 뷰
https://www.acmicpc.net/problem/1174
1174번: 줄어드는 숫자
음이 아닌 정수를 십진법으로 표기했을 때, 왼쪽에서부터 자리수가 감소할 때, 그 수를 줄어드는 숫자라고 한다. 예를 들어, 321와 950은 줄어드는 숫자이고, 322와 958은 아니다. N번째로 작은 줄어
www.acmicpc.net
N번째 줄어드는 수를 구하는 문제입니다. 줄어드는 수는 3210 과 같이 내림차순인 수이고 0이 1번째 줄어드는 수 입니다.
문제 접근 방법은 다음과 같습니다.
먼저 1자리 수인 0~9를 리스트에 넣고 0번째 값을 pop 하면서 0 ~ 해당 수의 1의 자리수-1 를 r이라 하면 10 * pop 한 수 + r 을 다시 리스트에 맨 마지막에 넣습니다. 이를 반복하면 9876543210이 되면 끝납니다.
예를 들어, 처음에 0~9가 리스트에 있으면 0 % 10 = 0 => [0, 0) 에는 아무 수가 없으므로 패스
1 : 1 % 10 = 1 => [0, 1) 에는 0이 있다. 그러므로 10 * 1 + 0 = 10을 리스트에 넣는다.
그러면 리스트에는 현재 2,3,4,5,..., 9, 10 으로 오름차순으로 정렬됩니다.
이런식으로 오름차순을 만들면서 줄어드는 수의 리스트를 구할 수 있습니다. 또한 9876543210이 줄어드는 수 중 가장 큰 수 이므로 N이 9876543210의 index 보다 크면 -1을 리턴합니다.
코드는 다음과 같습니다.
'알고리즘 > 백준' 카테고리의 다른 글
백준 1356 유진수 python3 (0) | 2021.06.19 |
---|---|
백준 2116 주사위 쌓기 C++ (0) | 2021.06.19 |
백준 2014 소수의 곱 C++ (0) | 2021.06.06 |
백준 17142 연구소3 C++ (0) | 2021.06.04 |
백준 10840 구간 성분 python3 (0) | 2021.06.02 |