인프런 커뮤니티 질문&답변

km님의 프로필 이미지
km

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

2-I

2-I에서 커스텀 사용함수 질문

작성

·

70

0

안녕하세요. 2-I문제를 풀다가 희한한걸 봐서 질문드립니다..

bool comp1(string a, string b) {

if(a.size() == b.size()) {

for(int i = 0; i < a.size(); i++) {

if(a[i] < b[i]) return true;

}

}

return a.size() < b.size();

}

bool comp2(string a, string b) {

if(a.size() == b.size()) {

return a < b;

}

return a.size() < b.size();

}

위의 comp1, comp2 함수를 sort()의 인자로 넣었을 때 ccomp1을 넣으면 맞왜틀이, comp2를 넣으면 맞았다고 뜹니다.

제가 생각했을 때 동작이 비슷하고 반례가 없어보이는데, 어떤 반례가 있길래 comp1, comp2의 채점 결과가 다르게 뜨는 걸까요?

답변 2

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 km님ㅎㅎ

맞는 코드, 틀린 코드 둘다 링크로 전체코드 부탁드립니다.

 

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

km님의 질문과 연관된 내용을 기존에 지식공유자께서 제공하신 답변 중에서 찾아봤습니다. 질문에서 언급된 comp1comp2 함수는 문자열을 기준으로 정렬하는 사용자 정의 함수로 보입니다. 이와 관련하여 문자열 비교를 다루는 비슷한 논의를 찾았습니다.

c++ sort 알고리즘 질문드립니다.

위 링크에서는 문자열을 비교할 때 직접 구현한 compare 함수와 문제가 발생했을 때의 케이스를 다루고 있으며, compare 함수에서 문자열의 길이가 같은 경우 문자열을 아스키 코드로 비교하는 방법이 포함되어 있습니다. comp1에서 문자를 하나씩 비교하는 로직과 comp2에서는 a<b를 사용해 전체 문자열을 직접 비교하는 방식이 언급된 답변과 연관 있어 보입니다.

질문의 핵심은 comp1 함수와 comp2 함수의 세부 동작 방식 및 결과에 차이를 보이는 반례 존재에 대한 것으로, 이런 커스텀 정렬 함수의 차이가 채점 결과에 어떻게 영향을 미치는지에 대한 이해를 위해서는 문자열 비교의 작동 방식과 sort 함수에서 사용자 정의 비교 함수를 적용할 때의 기준에 대한 깊이 있는 이해가 필요합니다.

해당 답변에서 강조된 부분은 사용자 정의 함수가 예상과 다르게 작동하는 이유를 이해하려면, 주어진 조건 내에서 각 문자를 어떻게 비교하는지 상세하게 이해해야 한다는 것입니다. comp1 함수는 문자열에서 각 문자를 차례대로 비교하여 첫 번째로 서로 다른 문자열의 문자를 발견했을 때 그 두 문자를 비교하고, comp2는 전체 문자열 비교를 operator<를 통해 수행합니다. 때로 이 두 방법 사이의 미세한 차이가 예상치 못한 결과를 초래할 수 있으며, 이는 정렬 알고리즘의 특성과 문자열 비교 방식의 이해를 필요로 합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만커스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

km님의 프로필 이미지
km

작성한 질문수

질문하기