2023. 2. 25. 17:02ㆍ자료구조 및 알고리즘/백준
나의 첫 접근
이미지 첨부 바람
스택으로는 일일이 접근 못 하니 앞에 있는 것을 뒤로 추가해준다. 이거는 몇 달 전에 본 사고 방식 같다.
vector로 풀다 문제 의도를 너무 벗어난 것 같았다.
다른 사람 풀이 참고
K번째 사람--이거는 순서 관련 변수 하나를 정해서 이게 K로 나눠떨어지나 아닌가를 판별하고
K의 배수가 아니면 앞에 원소를 뒤로 추가해준다.
int x = Q.front();
Q.pop(); // 뺄 때는 앞이 빠지고
Q.push(x); // 추가해줄 때는 뒤로 추가가 된다.
나는 무작정 K-1번 for문 돌리고 pop 하였는데
그것보다 K로 나눠떨어지는지 확인해주고 조건 처리해주는게 좀 더 깔끔해보인다.
최종 정답 코드
풀이방법 :
1. 사람을 모두 제거할 때까지 loop를 돕니다.
2-1. 일정 순번(k)째가 되면 그때 queue를 pop한 후 출력합니다.
2-2. 일정 순번째가 아니면 queue의 가장 앞 원소를 가장 뒤쪽으로 옮겨줍니다.
3. < > 과 ,를 잘 출력해주도록 조절해줍니다.
#include <iostream>
#include <queue>
using namespace std;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
queue<int> Q;
int N;
int K;
cin >> N >> K;
int removedPerson = 0;
int cur = 1; // 순서
for (int i = 1; i <= N; i++)
{
Q.push(i);
}
cout << "<";
while (removedPerson != N) {
while (1) {
if (cur++ % K == 0) {
cout << Q.front(); // 조만간 빼낼 애
Q.pop();
removedPerson++;
break;
}
else {
Q.push(Q.front());
Q.pop();
}
}
if (removedPerson != N)cout << ", ";
}
cout << ">";
return 0;
}
break문을 써서 안에 꺼 생략해준다는데... break문 쓰는게 익숙치 않다.
+)순서가 K의 배수가 되면 지워준다.
+)지워진 사람의 수에 관한 변수 removedPerson와 지금 순서에 관한 변수 current도 추가해줬다. 사이즈가 1인가로 판별하는 것보다는 지워진 사람이 N이 되기 전까지(removedPerson!=N) 이게 더 명확한 거 같다.
출처)https://codecollector.tistory.com/660
break문을 안 쓰고 해보자. 근데... empty 확인 필요
#include <iostream>
#include <queue>
using namespace std;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
queue<int> Q;
int N;
int K;
cin >> N >> K;
int removedPerson = 0;
int cur = 1; // 순서
for (int i = 1; i <= N; i++)
{
Q.push(i);
}
cout << "<";
while (removedPerson != N) {
while (!Q.empty()) {
if (cur % K == 0) {
cout << Q.front(); // 조만간 빼낼 애
Q.pop();
removedPerson++;
if (removedPerson != N)cout << ", ";
}
else {
Q.push(Q.front());
Q.pop();
}
cur++;
}
}
cout << ">";
return 0;
}
요세푸스 문제 1158번) N과 K의 크기만 좀 달라지고 나머지는 다를 바 없는 듯- stl 안 쓰면 N과 K를 5000으로 할당해줘야지. 크기가 5000인 배열이나 리스트처럼.
문제 유형 분석
스택, 큐 문제에서는 push, pop을 자유자재로 하는게 중요하고
어떤 상황에서 어떻게 조건 처리를 해서 push하고 어떤 인덱스 늘려주고 이게 중요한듯 하다.
오늘 배운 거) 후위 연산자와 break를 이용한 표현 방법 : 내 코드와 비교하면서 복습해본다!
'자료구조 및 알고리즘 > 백준' 카테고리의 다른 글
[백준 1021번] 회전하는 큐 (0) | 2023.03.05 |
---|---|
[백준 1966] 프린터 큐 (0) | 2023.02.27 |
[백준 9012번] 괄호 (0) | 2023.02.18 |
[백준 4949] 균형잡힌 세상 (0) | 2023.02.18 |
[백준 12605] 단어순서 뒤집기 (1) | 2023.02.18 |