- [ LEVEL 2 ] [ 스택 / 큐 ]
- [ Qusetion ]
- My Code
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> priorities, int location) {
int answer = 0,tmp,i,j;
while(true)
{
for(i = 1; i < priorities.size(); i++) // 첫번째 우선순위기준으로 그 다음인덱스부터 우선순위벡터 끝까지 조사
{
if(priorities[0] < priorities[i]) // 첫번째 우선수위보다 더 큰 우선순위있으면
{
tmp = priorities[0]; // 첫번째 우선순위 담아두고
for(j = 0 ; j < priorities.size()-1 ; j++) // 뒤에 원소를 하나씩 앞으로 댕김
priorities[j] = priorities[j+1];
priorities[j] = tmp; // 첫번째 우선순위는 벡터 맨 뒤에 위치
break;
}
}
if(priorities.size() == i) // 첫 번째 우선순위가 가장 큰 우선순위일 때
{
answer++; // 우선순위벡터에서 pop()개념으로 정답 우선순위 순번 1증가
for(j = 0 ; j < priorities.size()-1 ; j++) // q.pop()개념으로 뒤에 원소들 하나씩 댕김
priorities[j] = priorities[j+1];
priorities[j] = 0; // pop()된 우선순위를 0 (의미없는 수)으로 지정
if(location == 0) // 중복된 수들이 있었을 때를 고려. 같은 수중에 내가 원한 우선순위를 체크
break;
}
location--; // 내가 원하는 우선순위 차례 조작
if(location < 0) // 맨뒤로 내가 원하는 우선순위가 벡터에 갔을때
location = priorities.size() - 1; // 맨뒤 인덱스로 변경
}
return answer;
}
- Best Code
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int solution(vector<int> priorities, int location) {
queue<int> printer; //queue에 index 삽입.
vector<int> sorted; //정렬된 결과 저장용
for(int i=0; i<priorities.size(); i++) {
printer.push(i);
}
while(!printer.empty()) {
int now_index = printer.front();
printer.pop();
if(priorities[now_index] != *max_element(priorities.begin(),priorities.end())) {
//아닌경우 push
printer.push(now_index);
} else {
//맞는경우
sorted.push_back(now_index);
priorities[now_index] = 0;
}
}
for(int i=0; i<sorted.size(); i++) {
if(sorted[i] == location) return i+1;
}
}
" C++의 큐(Queue) STL 사용에 익숙해지자 "
- [ CheckPoint ]
- 우선 <queue> STL은 <algorithm> 헤더가 필요하다.
- queue는 정렬이 따로 없다.
- 사용가능한 주 함수로는 다음이 있다.
- 문제에서 큐에서 최대값을 순회하면서 구하는 방법을 몰랐다.
- *max_element OR *min_element ( 객체.begin() , 객체.endl() )
를 기억하자.- 함수는, 배열이나 벡터 큐 등등 (문자열도 됨) 에서 시작과 끝 사이에서 각각 최대값, 최소값을 반환한다.
다만 값이 아닌 주소를 반환하기 때문에 함수앞에 참조연산자를 붙인다.
728x90
반응형
'Algorithm Practice > [ 프로그래머스 ]' 카테고리의 다른 글
[프로그래머스] [#42586] 기능개발 (0) | 2020.09.15 |
---|---|
[프로그래머스][#42746] 가장 큰수 (0) | 2020.09.12 |
[ 프로그래머스 ] [ #12943 ] 콜라츠 추측 (0) | 2020.09.08 |
[ 프로그래머스 ] [ #12926 ] 시저 암호 (0) | 2020.09.08 |
[ 프로그래머스 ] [ #12903 ] 가운데 글자가져오기 (0) | 2020.09.06 |