katte
개발새발 우주정복기
katte
전체 방문자
오늘
어제
  • 분류 전체보기 (73)
    • 블로그 소개 (1)
    • Computer (36)
      • 자료구조 (0)
      • 알고리즘&백준 (19)
      • 컴퓨터구조 (0)
      • C++ (17)
      • Kotlin (0)
    • EE (29)
      • Verilog (22)
      • 디지털 시스템 (2)
      • 집적회로설계 (1)
      • 임베디드 시스템 (4)
    • 토이프로젝트 (3)
    • 기타 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 배열포인터
  • C언어
  • cin
  • Get
  • ignore
  • for 루프
  • 함수포인터
  • 스트림
  • C++ 스트림 클래스
  • 입력버퍼
  • c++
  • c++ 입출력
  • C++ 스트림 개요
  • cctype
  • ctime
  • C++11
  • 표준스트림
  • EOF

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
katte

개발새발 우주정복기

Computer/알고리즘&백준

[백준][C++] 요세푸스 문제 0

2022. 12. 1. 19:58

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

11866번: 요세푸스 문제 0

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)

www.acmicpc.net




큐를 이용하는 문제

비슷한 문제 계속 풀다보니 감이 잡혀서 쉽게 풀었다.

먼저 큐에 1부터 n까지의 숫자를 저장해둔 후,
k-1번째 숫자까지 뒤로 push한 뒤 pop한다.

그런 뒤에 가장 앞에 오는 숫자가 k번째 숫자이므로 우리가 원하는 수열의 숫자가 된다.
따라서 따로 벡터나 배열에 옮겨담은 후 pop한다.

이 과정을 큐가 빌 때까지 반복

#include <iostream>
#include <queue>

int main()
{
	std::queue<int> que;
	std::vector<int> vec;

	int n, k;
	std::cin >> n >> k;

	for (int i = 1; i <= n; ++i) que.push(i);
	while (!que.empty())
	{
		int n = k;
		while (--n)
		{
			que.push(que.front());
			que.pop();
		}
		vec.push_back(que.front());
		que.pop();
	}
	std::cout << "<";
	for (int i = 0; i < vec.size()-1; ++i) std::cout << vec[i] << ", ";
	std::cout << vec.back() << ">";
}



+) 실버3찍음

저작자표시 (새창열림)

'Computer > 알고리즘&백준' 카테고리의 다른 글

[백준][C++] 1966 프린터 큐  (0) 2022.12.07
[백준][C++] 백준 시간 초과날 때  (0) 2022.12.02
[백준][C++] 1874 스택 수열  (0) 2022.11.29
[백준][C++] 4949 균형잡힌 세상  (0) 2022.11.29
[백준][알고리즘][C++] 2750 수 정렬하기, 버블 정렬, 삽입 정렬  (0) 2022.11.19
    'Computer/알고리즘&백준' 카테고리의 다른 글
    • [백준][C++] 1966 프린터 큐
    • [백준][C++] 백준 시간 초과날 때
    • [백준][C++] 1874 스택 수열
    • [백준][C++] 4949 균형잡힌 세상
    katte
    katte
    개발새발 코딩하는 블로그 / HW 위주

    티스토리툴바