문제
https://www.acmicpc.net/problem/1038
1038번: 감소하는 수
음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를
www.acmicpc.net
입출력
해설
이 문제는 bfs를 이용해서 풀었다.
일단 초기 숫자는 0부터 9까지 넣었다.
그리고 나서 새로운 숫자는 전에 숫자에다가 %10 + 0~9 이다.
새로운 숫자를 만들 때마다 cnt를 증가하다가 n번째가 되면 새로 만든 숫자를 리턴해주면 된다.
정답코드
c언어
더보기
#include <stdbool.h>
#include <stdlib.h>
#define ll long long
/*
https://www.acmicpc.net/problem/1038
1038번 감소하는 수
*/
int n;
typedef struct newtype{
ll v;//자료형 새로 추가하면 된다.
}newtype;
typedef struct node{
struct newtype x;//
struct node* next;//다음 노드 가리키기
}node;
typedef struct queue{//front,pop,size,empty,push
node* front;//처음에 연결
node* back;//마지막에 바로 연결
ll size;
}queue;
void init(queue* q){
q->front=NULL;
q->back=NULL;
q->size=0;
}
void push(queue *q,newtype v){//qush하려면
node* new_node = (node *)malloc(sizeof(node));
new_node->x=v;//newtype으로 값 제대로 주기.
new_node->next=NULL;
if(!q->front){//아무것도 가리키고 있지 않을때
q->front = new_node;
q->back = new_node;
}else{//front가 있으면 back만 바꿔주면 된다.
q->back->next=new_node;//다음을 변경하고/
q->back=new_node;//마지막 노드 변경하기.
}
q->size++;//사이즈 하나 증가
}
node* front(queue *q){
node* ret=NULL;
ret=q->front;
return ret;
}
void pop(queue * q){//젤 앞에 값 빼기
node* front_node = q->front;//front 갖고 오기
q->front = q->front->next;//다음으로 포인터 옮겨주기.
free(front_node);//날려주기.
q->size--;//사이즈 하나 줄여주기
}
ll size(queue * q){//사이즈 확인
return q->size;
}
bool empty(queue *q){//비어있는지 확인
return q->size==0;
}
ll bfs(){
queue *q=(queue *)malloc(sizeof(queue));
int cnt=0;
for(int i=0;i<=9;i++){
newtype insert={i};
if(cnt==n)return i;
push(q,insert);cnt++;
}
cnt=9;
while(!empty(q)){
node*cur = front(q);
newtype insert={cur->x.v};
pop(q);
for(int i=0;i<=9 && insert.v%10>i;i++){
ll nx = insert.v*10+i;cnt++;
if(cnt==n)return nx;
newtype temp;temp.v=nx;
push(q,temp);
}
}
return -1;
}
main(){
scanf("%d",&n);
printf("%lld",bfs());
}
'코딩테스트 > 백준 코딩' 카테고리의 다른 글
백준 / 수학 / 막대기 (boj1094, c11) (0) | 2023.06.24 |
---|---|
백준 / 정수론 / 가로수 (boj2485, c11) (0) | 2023.06.24 |
백준 / 백트래킹 / 랭퍼든 수열쟁이야!! (boj15918,c11) (0) | 2023.06.24 |
백준 / 브루트 포스 / 리모컨 (boj1107, c11) (0) | 2023.06.24 |
백준 / 시뮬레이션 / 아주 서바이벌 (boj23293, c11, python3) (0) | 2023.06.22 |