728x90
반응형
문제 풀기 전 생각 :
/*
문제를 보니 큐를 사용하는 문제인듯 한데
그렇게 안 풀었다...그래서 헤맸는지도 모르겠다.
배열에 숫자들을 저장 후
와일 반복문으로 출력한 숫자의 갯수가 입력받은 n이 될때까지 반복한다.
k번째 숫자부터 출력을 시작한다. 출력이 완료된 숫자는 0으로 만든다.
그리고 다음 반복으로 넘어간다.
다음 반복에서 현재 위치한 숫자가 0이라면 패스한다.
만약 3칸을 이동하지 않은 상태이고 숫자가 0도 아니라면
다음칸으로 넘어가고 카운트를 1증가시킨다.
카운트가 3이 될때마다 출력한다. 출력후 카운트를 0으로 만든다.
*/
#include <iostream>
using namespace std;
int main() {
int n,k,count=0;
cin >> n;
cin >> k;
int arr[n];
int c=k,i=k-1;
for(int j=0 ; j<n ; j++) arr[j] = j+1;
cout << "<";
while(count < n){
if(arr[i] == 0){
i = (i+1)%n;
}
else if(c != k){
i = (i+1)%n;
c++;
}
else{
cout << arr[i];
if(count != n-1) cout << ", ";
arr[i] = 0;
count++;
c=1;
}
}
cout << ">";
return 0;
}
https://www.acmicpc.net/problem/11866
풀 때 어려웠던 점 또는 느낀점 :
큐를 사용할 걸 그랬다.
간단한 방법을 알고 싶다!!
개선방안으로 고고슝
개선방안 :
#include<stdio.h>
#include<algorithm>
#include<queue>
using namespace std;
int main(){
int n, k;
queue<int> q;
scanf("%d%d", &n, &k);
printf("<");
for(int i=1; i<=n; i++) q.push(i);
while(q.size()>1){
for(int j=0; j<k-1; j++){
q.push(q.front());
q.pop();
}
printf("%d, ", q.front());
q.pop();
}
printf("%d>", q.front());
}
오호 꼬리물기 처럼 구현했네요
저렇게 풀수도 있구나 간단하네 ㅠㅠ
내 머리를 탓합시다
컨테이너 사용을 습관화 해야겠네요
728x90
반응형
'Problem Solving' 카테고리의 다른 글
[C++] [백준 10867] 중복 빼고 정렬하기 (0) | 2021.07.26 |
---|---|
[C++] [LeetCode 234] Palindrome Linked List (0) | 2021.07.26 |
[C++] [백준 2164] 카드2 (0) | 2021.07.25 |
[C++] [프로그래머스] 방문 길이 (0) | 2021.07.25 |
[C++] [프로그래머스] 약수의 개수와 덧셈 (0) | 2021.07.25 |
댓글