[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 72장
글 작성자: _rian
72장. 공주 구하기 (큐 자료구조로 해결)
정보왕국의 이웃나라 외동딸 공주가 숲속의 괴물에게 잡혀갔습니다.
정보왕국에는 왕자가 N명이 있는데 서로 공주를 구하러 가겠다고 합니다. 정보왕국의 왕은 다음과 같은 방법으로 공주를 구하러 갈 왕자를 결정하기로 했습니다.
왕은 왕자들의 나이 순으로 1번부터 N번까지 차례로 번호를 매긴다. 그리고 1번 왕자부터 N번 왕자까지 순서대로 시계 방향으로 돌아가며 동그랗게 앉게 한다. 그리고 1번 왕자부터 시계 방향으로 돌아가며 1부터 시작하여 번호를 외치게 한다. 한 왕자가 K(특정 숫자)를 외치면 그 왕자는 공주를 구하러 가는데서 제외되고 원 밖으로 나오게 된다. 그리고 다음 왕자부터 다시 1부터 시작하여 번호를 외친다.
이렇게 해서 마지막까지 남은 왕자가 공주를 구하러 갈 수 있다.

예를 들어 총 8명의 왕자가 있고, 3을 외친 왕자가 제외된다고 하자. 처음에는 3번 왕자가 3을 외쳐 제외된다. 이어 6, 1, 5, 2, 8, 4번 왕자가 차례대로 제외되고 마지막까지 남게된 7번 왕자가 공주를 구하러 간다.
N과 K가 주어질 때 공주를 구하러 갈 왕자의 번호를 출력하는 프로그램을 작성하시오.
입력
첫 줄에 자연수 N(5<=N<=1,000)과 K(2<=K<=9)가 주어진다.
출력
첫 줄에 마지막 남은 왕자의 번호를 출력한다.
#include <iostream> #include <vector> #include <queue> #include <algorithm> using namespace std; int N, K; queue<int> Q; void solution(); int main(){ cin >> N >> K; solution(); } void solution(){ //initialize for(int i=1; i<=N; i++){ Q.push(i); } //delete while(Q.size() != 1){ for(int i=0; i<K-1; i++){ int a = Q.front(); Q.pop(); Q.push(a); } Q.pop(); } cout << Q.front() << endl; }
생각보다 쉬웠던 문제.. 큐의 내용을 잘 생각하면 된다.
DFS나 BFS, 트리구조 생각할 필요가 없었던 문제!
'알고리즘 Algorithm ' 카테고리의 다른 글
[Algorithm] 트라이(Trie)와 관련 문제들 (Python) (0) | 2021.04.11 |
---|---|
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 73장~75장 (0) | 2020.07.08 |
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 70장 ~ (0) | 2020.07.03 |
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 62장 ~ 63장 (0) | 2020.06.27 |
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 58장 ~ 59장 (0) | 2020.06.25 |
댓글
이 글 공유하기
다른 글
-
[Algorithm] 트라이(Trie)와 관련 문제들 (Python)
[Algorithm] 트라이(Trie)와 관련 문제들 (Python)
2021.04.11트라이란? 문자열을 효과적으로 탐색하기 위한 자료구조로, 문자열을 순차탐색하는 방식이 아닌 트리로 접근하기 위해 만들어진 자료구조입니다. 주로 Prefix Tree, digital search Tre, retrieval tree라고도 불리는데, retrieval tree의 trie를 따와 트라이라고 일반적으로 불립니다. 트라이는 문자열을 key로 사용하는 동적은 set 또는 연관배열을 저장하는 트리의 확장된 구조입니다. 문자열을 탐색할 때 단순하게 하나씩 비교하지 않고 key로 노드들을 탐색해나가기때문에 매우 효율적이라는 장점이 있습니다. 단, 빠르게 탐색 가능하지만 각 노드에서 자식들에 대한 포인터들을 배열로 모두 저장하고 있다는 점에서 저장 공간의 크기가 크다는 단점이 있습니다. 위 사진을 보시면 아… -
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 73장~75장
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 73장~75장
2020.07.08오늘도 한다 알고리즘!!! 73장. 최대힙(priority_queue : 우선순위 큐) 최대힙은 완전이진트리로 구현된 자료구조입니다. 그 구성은 부모 노드 값이 왼쪽 자식과 오른쪽 자식 노드의 값보다 크게 트리를 구성하는 것입니다. 그렇개 하면 트리의 루트(root) 노드는 입력된 값들 중 가장 큰 값이 저장되어 있습니다. 예를들어 5 3 2 1 4 6 7 순으로 입력되면 최대힙 트리는 아래와 같이 구성됩니다. 최대힙 자료를 이용하여 다음과 같은 연산을 하는 프로그램을 작성하세요. 1) 자연수가 입력되면 최대힙에 입력한다. 2) 숫자 0이 입력되면 최대 힙에서 최댓값을 꺼내어 출력한다. (출력할 자료가 없으면 -1를 출력한다.) 3) -1이 입력되면 프로그램을 종료한다. 입력 첫 번째 줄부터 숫자가 입력… -
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 70장 ~
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 70장 ~
2020.07.0370장. 그래프 최단거리 (BFS) 다음 그래프에서 1번 정점에서 각 정점으로 가는 최소 이동 간선수를 출력하세요. 입력 첫째 줄에는 정점의 수 N(1 N >> M; for(int i=0; i> from >> to; map[from].push_back(to); } for(int i=2; i -
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 62장 ~ 63장
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 62장 ~ 63장
2020.06.2763장. 인접 행렬(가중치 방향 그래프) 아래 그림과 같은 그래프 정보를 인접행렬로 표현해보세요 입력 첫째줄에는 정점의 수 N(1
댓글을 사용할 수 없습니다.