코드카타 문제 / C++
vector<int> cntX(10, 0);
vector<int> cntY(10, 0);
for(char c : X) cntX[c - '0']++;
for(char c : Y) cntY[c - '0']++;
string answer = "";
for(int digit = 9; digit >= 0; --digit)
{
int common = min(cntX[digit], cntY[digit]);
answer.append(common, '0' + digit);
}
if(answer.empty()) return "-1";
if(answer[0] == '0') return "0";
return answer;
처음 코드에서 erase를 사용하며
중첩 for문을 돌려 O(N²)로 처리
→ 큰 입력에서 시간 초과 발생
숫자가 0~9로 제한된 문제이므로 빈도수 배열로 O(N) 처리 가능
성능뿐 아니라 코드 가독성도 향상됨.
문자열이나 컨테이너에서 erase를 빈번하게 쓰면
성능이 기하급수적으로 느려질 수 있음.
범위가 제한된 문제에서는 빈도수 세기가 정석적인 접근
append(count, ch)처럼 잘 모르는 오버로드도
공식 문서를 참고하면 쉽게 이해가 가능
번 로직을 구현했다면,
그 로직의 시간 복잡도를 반드시 점검 해봐야함.