반응형
문제
감소하는 수
https://www.acmicpc.net/problem/1038
풀이
설명
N번째 감소하는 수를 구하는 문제입니다.
감소하는 수는 오른쪽 숫자가 왼쪽 숫자보다 작아야 합니다.
과정은 다음과 같습니다.
- 10보다 작으면 바로 반환합니다.
- 1부터 9까지의 숫자를 큐에 넣고 시작합니다.
- 큐에서 숫자를 하나씩 꺼냅니다.
- 마지막 자릿수보다 작은 숫자를 뒤에 붙여 새로운 감소하는 수를 생성
- 각 새로운 수를 큐에 추가하고 카운트 증가
- N번째 수에 도달하면 바로 반환
- 모든 가능한 감소하는 수를 생성했는데도 N번째 수에 도달하지 못하면 -1을 반환합니다.
예시 코드
function solution() {
const N = Number(input());
if (N < 10) return N;
const queue = new Queue();
for (let i = 1; i <= 9; i++) {
queue.enqueue(i);
}
let cnt = 9;
while (!queue.isEmpty()) {
const num = queue.dequeue();
const lastDigit = num % 10;
for (let i = 0; i < lastDigit; i++) {
const newNum = num * 10 + i;
queue.enqueue(newNum);
cnt++;
if (cnt === N) return newNum;
}
}
return -1;
}
'Coding Problem' 카테고리의 다른 글
[BOJ 15903] 카드 합체 놀이 (0) | 2025.04.08 |
---|---|
[BOJ 14468] 소가 길을 건너간 이유 2 (0) | 2025.04.01 |
[BOJ 2785] 체인 (0) | 2025.03.24 |
[BOJ 2653] 수 이어가기 (0) | 2025.03.23 |
[BOJ 1913] 달팽이 (0) | 2025.03.22 |