코딩굼벵이
구르는 중
코딩굼벵이
  • 분류 전체보기 (116)
    • [C_C++]이론 공부 (17)
      • 알고리즘 (11)
      • 이론+STL (6)
    • [C_C++]코딩테스트 연습 (45)
      • [프로그래머스] level 1 (26)
      • [프로그래머스] level 2 (5)
      • [백준] 일반 문제 (12)
      • 기타 (2)
    • Solana (28)
      • Documentation (9)
      • Validator - 공부 (10)
      • Validator - 실행 (devnet & te.. (6)
      • 그 외 (3)
    • React (4)
    • Linux (2)
    • Javascript (2)
    • 블록체인 기반 핀테크 및 응용 SW 개발 (8)
      • React (1)
      • Javascript (3)
      • Solidity (3)
      • 프로젝트 (1)
    • 기타 (10)

블로그 메뉴

  • 🌟 깃허브
  • 🌿 Portfolio(2021)
  • 홈
  • 태그
  • 방명록

티스토리

최근 글

태그

  • grafana
  • Hooks #React
  • 솔라나
  • 모니터링
  • 밸리데이터
  • Immer #ContextAPI

인기 글

전체 방문자
오늘
어제
hELLO · Designed By 정상우.
코딩굼벵이

구르는 중

[프로그래머스] 프린터 (pair, priority queue) - C++ 스택&큐
[C_C++]코딩테스트 연습/[프로그래머스] level 2

[프로그래머스] 프린터 (pair, priority queue) - C++ 스택&큐

2021. 10. 18. 23:38
728x90

 

 

 

max_element를 이용한 풀이

max_element는 algorithm 헤더에 있는 함수다. 큐에는 사용할 수 없고, 배열에 사용할 수 있다.

형태 : *max_element(v.begin(), b.end())

int solution(vector<int> priorities, int location) {
	int answer = 0;
	queue<int> waiting;		//인덱스 큐

	for (int i = 0; i < priorities.size(); i++) {
		waiting.push(i);
	}

	int max_value = *max_element(priorities.begin(), priorities.end());
	while (!waiting.empty()) {
		int cur_index = waiting.front();
		waiting.pop();
		//맨 앞에 애 우선순위가 제일 높으면
		if (max_value == priorities[cur_index]) {
			answer++;
			priorities[cur_index] = 0;
			max_value = *max_element(priorities.begin(), priorities.end());
			if (location == cur_index) {
				return answer;
			}
		}
		else {
			waiting.push(cur_index);
		}
	}
}

 

location은 요청한 문서의 인덱스다.

우선순위를 담고 있는 벡터인 priorities의 인덱스를 담는 큐(waiting)를 만든다.

cur_index = 인덱스 큐.front() 로 인덱스를 돌린다.

max_value = *max_element(priorities.begin(), priorities.end())로 우선순위 벡터의 최대값을 담고,

max_value == priorities[cur_index] 면 프린트하므로

answer를 증가시키고, 프린트한 우선순위 벡터 값을 최소로 낮춘 후 max_value를 갱신한다.

 

우선순위 큐와 pair를 이용한 풀이

int solution(vector<int> priorities, int location) {
	int answer = 0;
	priority_queue<int> prior;
	queue<pair<int, int>> waiting;

	for (int i = 0; i < priorities.size(); i++) {
		prior.push(priorities[i]);
		waiting.push(make_pair(i, priorities[i]));
	}

	while (!waiting.empty()) {
		int index = waiting.front().first;
		int value = waiting.front().second;
		waiting.pop();

		//지금 게 우선순위가 제일 높으면
		if(prior.top() == value) {
			prior.pop();
			answer++;
                //요청한 문서와 인덱스와 같으면
			if (index == location) {
				return answer;
			}
		}
                //아니면 뒤로 돌려보내기
		else {
			waiting.push(make_pair(index, value));
		}
	}
}

 

우선순위의 최대값을 스택처럼 top()으로 뽑을 수 있는 우선순위 큐 prior를 만든다.

인덱스와 우선순위 값을 페어로 가지는 큐 waiting을 만든다.

최대값을 prior.top()으로 뽑아서 waiting 큐 맨앞의 우선순위값과 비교한다.

최대면 answer++를 하고 최대값 큐를 pop 해서 최대값을 갱신한다.

이 때 프린트한게 요청한 문서의 인덱스면 리턴한다.

 

'[C_C++]코딩테스트 연습 > [프로그래머스] level 2' 카테고리의 다른 글

[프로그래머스] 기능개발 - C++ 스택&큐  (0) 2021.10.17
[C++] 프로그래머스 hash 2 - 위장  (0) 2021.10.17
[C++] 프로그래머스 hash 2 - 전화번호 목록  (0) 2021.10.17
[C++] 프로그래머스 hash 1- 완주하지 못한 선수 (vector만 이용 / 해시 이용)  (0) 2021.06.14
    '[C_C++]코딩테스트 연습/[프로그래머스] level 2' 카테고리의 다른 글
    • [프로그래머스] 기능개발 - C++ 스택&큐
    • [C++] 프로그래머스 hash 2 - 위장
    • [C++] 프로그래머스 hash 2 - 전화번호 목록
    • [C++] 프로그래머스 hash 1- 완주하지 못한 선수 (vector만 이용 / 해시 이용)
    코딩굼벵이
    코딩굼벵이
    구르는 재주 연마 중

    티스토리툴바