작성
·
150
0
빈도정렬 문제를 풀면서 수열에서 등장하는 횟수가 같은 숫자는
먼저 출력하게 하기 위해 첨부한 코드와 같이 if문에서 <=로 비교하는 대신
unordered_map에서 <로 비교를 하여 코드를 작성하였습니다.
백준에 있는 예제 입력들은 모두 정답과 같이 나오는데
막상 채점을 시작하면 틀렸다고 나오게 됩니다.
물론 강의영상에서는 큰돌님이 커스텀 우선순위 비교를 이용하였지만
다음과 같은 방법으로도 문제풀이가 가능할 것 같아 질문을 드리고 싶습니다.
이러한 방법이 타당한 방법인지 궁금합니다.
또한 타당한 방법이라면
제 코드의 잘못된 부분이 어느부분인지 궁금합니다.
감사합니다.
#include <bits/stdc++.h>
using namespace std;
unordered_map<string, int> _map;
int main() {
int n, c;
cin >> n >> c;
string input;
for (int i = 0; i < n; i++) {
cin >> input;
_map[input]++;
}
while (!_map.empty()) {
int temp = 0;
string temp_str;
for (auto element : _map) {
if (temp < element.second) {
temp = element.second;
temp_str = element.first;
}
}
for (int i = 0; i < temp; i++) {
cout << temp_str << ' ';
}
_map.erase(temp_str);
}
}
답변 1
0
안녕하세요. 전성근님ㅎㅎ
해당코드는 "unordered_map에서 들어오는 순서대로 정렬"되어있고 이 "기본전제"를 바탕으로 동작하는 코드가 아닌가요?
unordered_map은 "순서가 정렬이 되지 않는" 자료구조입니다. 그렇기 때문에 기본전제 자체가 틀리기 때문에제출하면 틀리는 것입니다. 하지만 예제는 맞을 수 있죠. 그건 운이 좋은 겁니다. 어떠한 경우의 수에서는 성근님이 예상하는 대로 정렬이 되어서 맞는 것이죠. 하지만 수많은 테스트케이스를 통과해야 맞다고 뜨는 "제출"에서는 당연히 틀리죠. "기본전제"가 올바르지 않은 코드이기 때문입니다.
또 질문사항있으시면 언제든 말씀 부탁드립니다.
감사합니다.
강사 큰돌 올림.
감사합니다 큰돌님!