[BOJ] 백준 1764 듣보잡
문제 링크 : https://www.acmicpc.net/problem/1764
이 문제는 일견 쉬워보이지만 테스트케이스 N,M이 각각 50만개여서 시간초과 오류가 나기 쉽습니다. 저도 시간초과 오류에 많이 빠졌습니다. 제가 푼 방법 순서대로 4가지는
1. 듣도못한 사람들, 보도못한 사람들 각각 벡터로 받고 각각 sort 후 일치하면 출력.
2. 듣도못한 사람들, 보도못한 사람들 각각 벡터로 받고 일치하는것들 모아서 sort후 출력.
3. a-z 까지 26개 벡터 생성 후 각각 초성에 따라 분류해서 sort.
하였으나, 모두 시간초과 오류가 났습니다.
2중 for문을 사용할때, 50만X50만 시간이 소요돼서 그렇습니다.
만약, for문을 한개씩만 사용한다면 50만 * (for문의 개수) 시간이 소요 될 것입니다.
따라서 한꺼번에 듣도못한 사람, 보도못한 사람 모두 받고, 이 벡터를 sort한 후 중복되는 것들만 출력 한다면 50만 * 3 의 시간이 소요됩니다.
소스코드 :
#include#include #include #include using namespace std; int main() { int ta, tb; cin >> ta >> tb; cin.ignore(); vector res; vector v(ta+tb); // 벡터 v에 듣,보 한꺼번에 받는다. for (int i = 0; i < ta + tb; i++) { cin >> v[i]; cin.ignore(); } // 전체 sort 실시. sort(v.begin(), v.end()); // 중복되는 이름은 res 벡터에 push. for (int i = 0; i < ta + tb; i++) { if (v[i] == v[i + 1]) { res.push_back(v[i]); i += 1; } } int rsize = res.size(); cout << rsize << endl; for (int i = 0; i < rsize; i++) { cout << res[i] << '\n'; } }
댓글
댓글 쓰기