본문 바로가기

개발 관련 기타/알고리즘

[프로그래머스] (C++) 프린터

문제는 이 링크를 타고 가시면 있습니다.

 

저는 이 문제를 풀면서 다음 세가지를 생각해보았습니다.

  • 문제에서 나온 로직 자체를 프로그래밍 하면 계산 시간이 너무 오래 걸린다.
  • 어떤 꼼수가 없을까?
  • 굳이 번호를 뒤로 가져다 붙인다고 생각하기보다 번호를 가리키는 화살표가 있어서 한칸 씩 움직이고 끝까지 갔을 때는 다시 돌아오면 되지 않을까?

다음과 같은 코드로 문제를 해결하였습니다.

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

bool compare(const int & a, const int & b) {
  return (a < b);
}

int solution(vector<int> priorities, int location) {
  int answer = 0;
  vector<int>::iterator iter;
  iter = priorities.begin();
  while (1) {
    if (*iter == *std::max_element(priorities.begin(), priorities.end(), compare)) {
      answer++;
      *iter = 0;
      if (std::distance(priorities.begin(), iter) == location) {
        break;
      }
    }
    iter++;
    if (iter == priorities.end()) iter = priorities.begin();
  }
  return answer;
}