티스토리 뷰

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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함