2022. 10. 31. 17:57 자기개발/코딩테스트
C++ (코딩테스트) - 프린터(프로그래머스)
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42587
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나의 풀이
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> priorities, int location) {
int answer = 0;
int num = priorities[location];
vector<int> m_priorities = priorities;
sort(m_priorities.rbegin(), m_priorities.rend());
int m_rank = 0;
for (; m_rank < m_priorities.size(); m_rank++)
{
if (m_priorities[m_rank] == num) break;
}
int cnt = 0;
for (int i = 0; i < m_rank; i++)
{
while (true)
{
if (m_priorities[i] == priorities[cnt])
{
priorities[cnt] = 0;
answer++;
break;
}
cnt++;
cnt %= priorities.size();
}
}
for (int j = 0; j < priorities.size(); j++, cnt++)
{
cnt %= priorities.size();
if (priorities[cnt] == num)
{
priorities[cnt] = 0;
answer++;
if(cnt == location) break;
}
}
return answer;
}
베스트 추천 풀이
#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++ (코딩테스트) - 하노이의 탑(프로그래머스) (0) | 2022.11.08 |
---|---|
C++ (코딩테스트) - 메뉴 리뉴얼(프로그래머스) (0) | 2022.11.01 |
C++ (코딩테스트) - H-Index(프로그래머스) (0) | 2022.10.31 |
C++ (코딩테스트) - 튜플(프로그래머스) (1) | 2022.09.30 |
C++ (코딩테스트) - [1차]캐시(프로그래머스) (1) | 2022.09.30 |