[백준(BOJ) 1158번] 요세푸스 문제 (C++)

2022. 1. 13. 23:05·PS(Problem Solving)/C++

문제 링크

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

 

문제 정보

입력

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

출력

예제와 같이 요세푸스 순열을 출력한다.

 

풀이

 STL List의 erase 함수가 그 다음 원소의 위치를 반환한다는 것을 기억하고 있으면 해결 할 수 있는 문제다!

 

소스 코드

#include <bits/stdc++.h>
using namespace std;

int main(void) {
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	int n; // 초기 인원수. 1 ~ n명
	int k; // 제거할 차례
	cin >> n >> k;
	
	list<int> L;
	for (int i = 1; i <= n; i++) {
		L.push_back(i);
	}
	auto cursor = L.begin();
	
	cout << '<';
	
	while (L.size() > 1) {
		// k 차례로 이동
		for (int i = 0; i < k - 1; i++) {
			cursor++;
			if (cursor == L.end()) {
				cursor = L.begin();
			}
		}
		
		cout << *cursor << ", "; // k번째 원소 출력
		
		cursor = L.erase(cursor);
		
		if (cursor == L.end()) {
			cursor = L.begin();
		}
	}
	
	cout << *cursor << '>';
	
	return 0;
}

 

저작자표시 비영리 변경금지
'PS(Problem Solving)/C++' 카테고리의 다른 글
  • [백준(BOJ) 10773번] 제로 (C++)
  • [백준(BOJ) 10828번] 스택 (C++)
  • [백준(BOJ) 5397번] 키로거 (C++)
  • [백준(BOJ) 1406번] 에디터 (C++)
SiwonHae
SiwonHae
프로그래밍을 공부하고 있는 학생입니다.
  • SiwonHae
    시원해의 블로그
    SiwonHae
  • 전체
    오늘
    어제
    • 전체보기 (148)
      • PS(Problem Solving) (94)
        • C (25)
        • C++ (33)
        • JAVA (36)
      • Algorithm & Data Structure (13)
      • Computer Science (12)
        • Network (2)
        • Design Pattern (10)
      • Back-end (5)
        • Spring (4)
      • Front-end (1)
        • React (1)
      • JAVA (4)
      • 정보처리기사 (17)
      • SQLD (2)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
  • 인기 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
SiwonHae
[백준(BOJ) 1158번] 요세푸스 문제 (C++)
상단으로

티스토리툴바