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

 

1158번: 요세푸스 문제

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

www.acmicpc.net

코드 설명

큐 자료구조 연습 문제였다. 큐에 전부 넣어준 후 2번은 빼고 뒤에 다시넣고 3번째 차례일때 출력하고 빼주는 간단한 문제였다.

 

소스코드

#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int main() {
	int n, k;
	cin >> n >> k;
	queue<int> q;

	for (int i = 1; i <= n; i++) {

		q.push(i);
	}
	cout << "<";
	while (!q.empty()) {

		for (int i = 0; i < k - 1; i++) {
			int temp = q.front();
			q.pop();
			q.push(temp);
		}
		if (q.size() == 1) {

			cout << q.front() << ">";
			q.pop();
		}
		else {
			cout << q.front() << ", ";
			q.pop();
		}
	}



	return 0;
}

'알고리즘 공부 > 백준' 카테고리의 다른 글

[백준] 단어 정렬 (1181/ C++)  (0) 2021.05.29
[백준] 14425 문자열 집합(c++)  (0) 2021.05.18
[백준] 9663 N-Queen (C++)  (0) 2021.05.17
[백준] 9935번 문자열 폭발 C++  (0) 2021.05.16
[백준] 미로탐색(C++/2178번)  (0) 2021.05.06

programmers.co.kr/learn/courses/30/lessons/42587

 

코딩테스트 연습 - 프린터

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린

programmers.co.kr

코드 설명

 

priorities배열에 따라 큐에 전부 넣어준후 뒤쪽을 전부 탐색한다.

중요도가 큰게있다면 뒤로 넣어주고 priorities 배열 자체도 바꿔준다.(문제를 더 단순하게)

또한, 큐에 담아줄때는 pair를 이용하여 각각의 원래 location 위치를 달아주고 수정한다.

 

문제에서 요구한 answer++ 시점을 잘 잡아주자 ! 여기서 실수발생

 

 

 

코드

#include <string>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;

int solution(vector<int> priorities, int location) {
    int answer = 0;
    queue<pair<int,int>> q;
    
    for(int i=0;i<priorities.size();i++){
        q.push({priorities[i],i}); //이름표마냥 location값 붙여두기
    }
    
    while(!q.empty()){
        bool flag=false;
        int a=q.front().first;
        
        for(int i=0;i<priorities.size();i++){
            if(a < priorities[i]){
                flag=true;
                break;            
            }
            
        }

        if(flag==true){ // 뒤쪽에 중요도 큰게 있음
            q.push({q.front().first,q.front().second});
            q.pop();
            int temp=priorities[0];
            priorities.erase(priorities.begin());
            priorities.push_back(temp);
            
            
        }
        else{ // 뒤쪽에 중요도 큰게 없음 
            answer++;
            if(q.front().second == location ){
                break;
            }
            
            q.pop();
            cout << priorities[0] << " " ;
            priorities.erase(priorities.begin());
            
        }
        
        
        
    }
    
    
    
    return answer;
}

programmers.co.kr/learn/courses/30/lessons/42586#

 

코딩테스트 연습 - 기능개발

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는

programmers.co.kr

코드 설명

큐를 이용하여 100을 넘길시 pop시킨다 (cnt를 통해 while문이용)

 

progresses 인덱스와 speeds 인덱스를 각각 어떻게 매번 더해줄까 생각하다가 그냥 큐에있는것을 하나씩 빼서 더한후 다시 push해주는 방법을 이용하였다.(단순..)

 

IDE를 쓰지 않으려는 연습을 계속하다보니까 core dumped가 너무 자주 발생한다...설계를 정확히하고 짧은 구문마다 디버깅을 해보자 

 

 

이번에도 while(q.front()>100) 만하고 큐가 비어있는 상황을 위에서 if문으로 그냥 해버리니까 당연히 while문 내에서 큐가 비는 상황이 발생한다....조심하자!

코드

#include <string>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    queue<int> q;
    for(int i=0;i<progresses.size();i++){
            q.push(progresses[i]);
            
        }
    
    while(1){
        int cnt=0;
        
        
        
    while(q.front()>=100 && !q.empty()){
        
            if(q.front()>=100) cnt++;
            q.pop();
            progresses.erase(progresses.begin());
            speeds.erase(speeds.begin());
            
        }
        
        
        
        
        for(int i=0;i<speeds.size();i++){
            int temp=q.front()+speeds[i];
            cout << q.front() << temp << endl;
            q.pop();
            q.push(temp);
        }
        
        
        if(cnt>0) answer.push_back(cnt);
        if(q.empty())break;
    }
    
    
    return answer;
}

'알고리즘 공부 > 프로그래머스' 카테고리의 다른 글

[프로그래머스] 더 맵게  (0) 2021.05.01
[프로그래머스] 프린터  (0) 2021.04.30
[프로그래머스] 타겟넘버  (0) 2021.04.27
[프로그래머스] 입국심사  (0) 2021.04.27
[프로그래머스] H-Index  (0) 2021.04.27

+ Recent posts