티스토리 뷰

코딩테스트/Silver 5

[S5] 2161. 카드1

jhcard 2022. 6. 27. 12:34
728x90
반응형

https://www.acmicpc.net/problem/2161

 

2161번: 카드1

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가

www.acmicpc.net

방식은 여러가지가 있다.

나는 처음에 list를 사용하여 해결하였다. 그리고, 알고리즘 분류를 보고 큐로 사용하는게 더 효율적이었겠구나 싶었다.

list와 queue를 여기에서 처음 사용해봐서 해당 글을 작성하였다.

 

우선 이 문제에 집중해보자.

내가 해결한 방식을 설명하겠다.

1. 큐 또는 리스트에 1~N까지의 수를 전부 순서대로 넣어준다.

2. 문제에 요구하는 대로 실행해준다.

3. 가장 앞에 있는 친구를 출력한다.

4. 다음 칸에 있는 친구를 자료구조의 맨 뒤쪽에 넣어준다(push_back or push)

5. 3번과 4번을 반복한다.

 

이제 리스트와 큐에 대해 알아보자.

https://jhcard.tistory.com/14

 

[C++] List 라이브러리

List 라이브러리 - 노드를 통해 만들어진 자료구조이다. 이전에 말했던 vector처럼 배열 구조라고 말하기에는 힘들다. 노드라는 하나의 구조체(클래스)를 생성하여 서로 연결시키는 관계이기 때문

jhcard.tistory.com

 

 

https://jhcard.tistory.com/69

 

[C++] queue 라이브러리

queue는 list자료구조와 매우 유사하다. list에서 파생된 자료구조라 생각하면 편하다. FIFO구조로 first in first out / 먼저 들어간 친구가 먼저 나오게 되는 그런 구조이다. 먼저 list를 이해하고 오는 것

jhcard.tistory.com

 

다음은 내가 작성한 코드이다. 리스트를 활용한 답과 큐를 활용한 답이 있다.

살펴보면 자료형만 다르고 사용한 함수는 거의 동일하다.

#include <cstdio>
#include <list>

int main(void){
    int N; scanf("%d", &N);
    std::list<int> l;
    for(int i = 1; i<=N; i++) l.push_back(i); 
    for(int i = 0; i<N; i++){
       printf("%d ", l.front());
        if(l.empty()) break;
        l.pop_front();
        l.push_back(l.front());
        l.pop_front();
    }
}
#include <cstdio>
#include <queue>

int main(void){
    int N; scanf("%d", &N);
    std::queue<int> q;
    for(int i = 1; i<= N; i++) q.push(i);
    printf("%d ", q.front());
    for(int i = 0; i<N-1; i++){
        q.pop();
        q.push(q.front());
        q.pop();
        printf("%d ", q.front());
    }
}
728x90
반응형

'코딩테스트 > Silver 5' 카테고리의 다른 글

[S5] 2822. 점수 계산  (0) 2022.06.28
[S5] 7785. 회사에 있는 사람  (0) 2022.06.27
[S5] 5555. 반지  (0) 2022.06.26
[S5] 10826. 피보나치 수 4  (0) 2022.06.26
[S5] 2018. 수들의 합 5  (0) 2022.06.24