less than 1 minute read

899. Orderly Queue / c++ / Hard / 30분

문제 및 코드

#include <queue>

struct Cmp
{
    bool operator()(char& a, char& b)
    {
        return a > b;
    }
};

class Solution {
public:
    string orderlyQueue(string s, int k) {
        string Answer = s;
        if (k == 1)
        {
            int count = s.length() - 1;
            while (count-->0)
            {
                s = s.substr(1) + s[0];

                if (s < Answer) Answer = s;
            }
        }
        else
        {
            sort(Answer.begin(), Answer.end());
        }

        return Answer;
    }
};

접근 방식

정렬

  1. 처음엔 단순 정렬인 줄 알았는데, k가 1인 경우엔 정렬할 수 없이 계속 순환할 뿐이었다.
  2. 그래서 Answer를 s로 초기화 해주고 k가 1인 경우와 아닌 경우로 나눈 뒤
    1. k가 1이면 s.size() - 1 번 만큼 (한번 더 돌면 원래 상태이므로 -1 해줌) 돌면서 맨 앞 글자를 맨 뒤로 보내준다. 그 후 Answer 보다 작다면 Answer 갱신
    2. k가 2 이상이면 단순히 Answer를 정렬해준다.

생각해 볼 점

  1. 리트코드 문제는 단순히 구현하는게 아니라 해당 문제의 본질을 찾는 것이 다른 곳들보다 더 중요하다고 느꼈다.
  2. 앞에서 2개 중 하나만 골라 뒤로 보낼 수 있더라도 정렬이 가능하다는 것을 다시금 깨달았다.

해시태그

#99클럽 #코딩테스트 준비 #개발자 취업 #항해99 #TIL