수업 준비 하던 와중에 우연히 발견한 문제고 학생들한테는 안줬지만 내가 풀어보고 싶어서 오늘 끝내본 문제다. 문제를 읽는 순간 느꼈는데 정말로 이런 유형의 문제가 한국 기업 사이에서 빈번히 나오는 구현 + 정렬 문제다.
정말 이런 문제를 찾고 싶었는데 태그에 Counting 이라고 적혀있는걸 봐서 비슷한 유형의 문제를 더 찾아봐야겠다.
문제 설명으로는 votes 스트링 벡터가 나오고 해당 캐릭터가 위치한 인덱스가 그 캐릭터의 순위를 뜻한다. "ABC" 같은 경우, 'A'는 0순위, 'B'는 1순위...이런 식이고 votes 벡터를 전부 다 읽었을때 캐릭터들이 얻은 순위에 순서대로 답을 제출해야한다.
만약에 순위가 같을 경우에는 다음 순위를 비교하고 그래도 안된다면 사전순으로 높은것을 앞으로 보내면된다.
이런류의 문제가 실제로도 많이 나오는 편이고 좀 더 복잡한 형태로 나왔을때 많이 당황했던적이 있었는데 잘 참고해야겠다.
내가 사용했던것은 맵을 이용한 답이었고. 값으로 벡터를 잡아서 해당 순위마다 인덱스를 높여줄려고 했었다.
시작은 이렇게 갔다. 솔직히 좋은 솔루션일지는 잘 모르겠지만 처음 맵을 만들때 벡터의 사이즈를 지정할 수 없어서 어쩔수 없이 다른 for 룹으로 사이즈를 지정해줬다.
그리고 이런식으로 순위를 높은 순서대로 앞으로 나열해주고 그게 안될경우는 사전순으로 낮은 순서대로 쭉 올렸고 답이 나왔다.
그런데 내가 정답을 확인해보니깐 내가 이 시점까지도 잘 몰랐던거 하나를 발견했다.
커스텀 정렬을 할때 굳이 for 룹을 안써주고 벡터 자체로만 비교해도 값이 똑같은 bool 값이 나온다는것이었다..원래 벡터끼리 비교할때는 첫번째 원소만 비교 후에 정렬을 하는게 국룰아닌가 싶었는데
이런식으로 실험해본 결과 첫번째 원소가 같으면 두번째 원소로 비교를 하는 for 룹과 유사한 형태의 비교를 하고 있었다. 그렇기 때문에 for 문을 스킵하고 그냥 부등식을 쓴것만으로도 똑같은 결과가 나오고 있었던 것이다.
훨씬 코드가 깔끔하고 헷갈일 일이 하나 더 줄어든거같다.
배운점:
1. 커스텀 정렬의 활용
2. [&] 안에 굳이 hashMap 안넣어도 된다는 점