| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
Tags
- 카카오
- SSAFY
- IT 동향
- 네트워크 관리사
- 프로그래머스
- java 객체지향 프로그래밍
- 네트워크 관리사 2급
- 인앱결제
- IT 트렌드
- it 뉴스
- 코딩테스트 연습
- SSAFYcial
- python
- 네트워크 관리사 2급 실기
- it 이슈
- 코딩테스트
- Java
- 백준위
- 코테
- SSAFY 7기
- KT
- 구글
- 신문스크랩
- 백준
- 싸피
- 우테코
- 리얼클래스
- 싸피셜
- 신문 스크랩
- html
Archives
- Today
- Total
개발자일걸요..?
11866 요세푸스 문제0 본문
728x90
반응형
문제링크 : www.acmicpc.net/problem/11866
11866번: 요세푸스 문제 0
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)
www.acmicpc.net

<알고리즘>
1) vector를 이용해 1~N까지의 숫자를 나열(1~N까지의 숫자를 0~N-1칸에 배열)
2) index = K-1로 시작해 vector[index]값을 요세푸스 순열에 추가
3) 이미 요세푸스 순열에 추가된 vector[index]값은 삭제
4) index를 K-1값(도착지점 포함 K칸이니까)만큼 증가시키는데 배열의 size를 넘지않게 주의
5) vector의 요소가 1개 남을 때까지(index변경 수식에서 zero division발생 방지) 2~4과정 반복
6) 하나 남은 vector 요소를 요세푸스 순열에 추가
7) 문제에서 요구하는 형식에 맞춰 queue 출력, pop 반복
메모리 : 2016KB 시간 : 0ms
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int main() {
int N = 0;
int K = 0;
cin >> N >> K;
vector<int> member(N);
for (int i = 1; i <= N; i++) { member[i - 1] = i; }
queue <int> result;
int index = K - 1;
for (int i = 0; i < N; i++) {
result.push(member[index]);
member.erase(member.begin() + index);
if (member.size() >1) {
index = (index + K - 1 >= member.size()) ? (index + K - 1) % member.size() : (index + K - 1);
}
else {
index = 0;
}
}
cout << "<";
while(result.size()>1){
cout << result.front() << ", ";
result.pop();
}
cout << result.front() << ">";
return 0;
}반응형
'알고리즘코딩 > Baekjoon Online Judge' 카테고리의 다른 글
| 10866번 덱 (0) | 2021.02.26 |
|---|---|
| 1966번 프린트 큐 (0) | 2021.02.25 |
| 2164번 카드2 (0) | 2021.02.24 |
| 18258번 큐2 (0) | 2021.02.24 |
| 17298번 오큰수 (0) | 2021.02.23 |
Comments