일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |
Tags
- 구글
- html
- 네트워크 관리사
- IT 트렌드
- java 객체지향 프로그래밍
- SSAFY 7기
- KT
- it 뉴스
- 네트워크 관리사 2급
- it 이슈
- 코테
- SSAFYcial
- Java
- 신문 스크랩
- 신문스크랩
- IT 동향
- 싸피
- 네트워크 관리사 2급 실기
- 백준위
- 인앱결제
- 백준
- 코딩테스트
- python
- 싸피셜
- 카카오
- SSAFY
- 리얼클래스
- 우테코
- 프로그래머스
- 코딩테스트 연습
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