한다 공부
[C] 큐 : 백준 알고리즘 2164번 카드2 본문
안녕하이소..
큐 문제를 풀어봤다..
아니 근데 이거 어제 금방 다 했는데
런타임 에러가 떠가지고 한 3시간 고민하다가 모르겠어서
백준 질문 게시판에 올리고 늦게 잤다.
아침에 일어나니 어떤 정말 고마우신 분께서 에러난 부분 알려주셨는데
int main() 써야하는걸 void main() 써서 에러난 거였다
약간 슬펐다..
그 분 아니었으면 평생 몰랐을 듯 ㅠㅠ
근데 나 void main 쓰던 사람 아닌데 왜 void main 이라 했지? 봤더니
처음에 return값 관련해서 에러가 나서 이것 저것 만져보다가 (해당 에러는 중간에 수정 완료..)
void로 고쳐보기도 하고.. 그랬었던 것 같은데
원래대로인 int로 수정을 안한 것 같다.
그러니까..
오늘의 교훈 : 평소에 안하던 짓 좀 하지말자
문제를 풀기 위해 생각을 해봤다. 흠
원형 큐 생성하듯이 한 다음에,
그때 그때 사이즈가 다른 원형 큐를 만들고 싶어서
동적할당을 해줬다.
malloc~ 해제는 free~
그리고 데이터를 옮길 때는n-1번 만큼,
앞에 카드를 빼서 dequeue 하는걸 2번,
2번째 dequeue한 건 back이라는 변수에 받아서 맨 뒤에 enqueue!
n-1번 반복하면 마지막에 카드 하나가 남는데,
front+1 (==rear) 번째에 있으므로 출력해주면 끝! 이다
문법적 실수같은 것만 조심하면 된다.. (씁쓸)
#include<stdio.h>
typedef int element;
typedef struct {
int front;
int rear;
element *data;
}QueueType;
void init_queue(QueueType* q) {
q->front = q->rear = 0;
}
void enqueue(QueueType* q, element item, int n) {
q->rear = (q->rear + 1) % n;
q->data[q->rear] = item;
}
element dequeue(QueueType* q, int n) {
q->front = (q->front + 1) % n;
return q->data[q->front];
}
int main() {
int n, i, back;
QueueType q;
init_queue(&q);
scanf(" %d", &n);
//그때 그때 사이즈 맞는 원형 큐를 생성하고싶어서 동적할당
q.data = (element*)malloc((n + 1) * sizeof(element));
//데이터 삽입 1~N
for (i = 1; i <= n ; i++)
enqueue(&q, i, n + 1);
//데이터 옮기기
for (i = 1; i < n; i++) {
dequeue(&q, n + 1);
back = dequeue(&q, n + 1);
enqueue(&q, back, n + 1);
}
printf("%d", q.data[(q.front + 1)%(n+1)]);
free(q.data);
}
큐 문제 빨리 끝내고 덱 문제 하나 풀려고 했는데
이 문제에서 너무 많은 시간을 써서...
다음 공부로는 덱 문제 말고 연결리스트를 하려고 한다.
연결리스트 정리 포스팅에서 봐유~
파이팅!
'Algorithm > 문제풀이' 카테고리의 다른 글
[C++] 백준 알고리즘 10757번 큰 수 A+B (0) | 2021.09.12 |
---|---|
[C++] 백준 알고리즘 11651번 좌표 정렬하기 2 (0) | 2021.09.09 |
[C++] 백준 알고리즘 1431번 시리얼 번호 (0) | 2021.09.09 |
[C++] 백준 알고리즘 1316번 그룹 단어 체커 (0) | 2021.09.09 |
[C] 스택 : 백준 알고리즘 9012번 괄호 (0) | 2021.07.11 |