인프런 커뮤니티 질문&답변
교안 compare 함수 질문
작성
·
180
·
수정됨
0
안녕하세요 큰돌님. 120p string으로 이루어진 배열을 정렬한 코드에 대해 질문드립니다.
제가 이해한 바로는 compare라는 함수는 문자열의 길이를 비교하는 함수입니다.
- if(a.size() == b.size()) return a < b; 는 문자열의 길이가 같으면 a b 크기를 비교합니다. 이 때 비교하는 기준은 아스키 코드입니다. 
- 만약 문자열의 길이가 같지 않으면 크기를 비교해서(아스키코드 기준) 바로 boolean 값을 반환합니다. 
- 111은 222와 아스키코드적으로 비교를 하게되는데.. 이때 1의 아스키코드는 49이고 2의 아스키 코드는 50입니다. 111이 a, 222가 b 이니까 a < b 는 T가 됩니다. 
- 111은 이제 33과 비교를 하게 됩니다. if문에 해당이 되지 않기때문에 바로 return a.size() < b.size() 를 하게 됩니다. a가 111, 33이 b이고 a의 size는 3, b의 size는 2입니다. 결과적으로 F가 됩니다. 
여기서 드리고 싶은 질문은
- F가 되면 순서를 바꾸는건가요? 그렇담 왜 33,222,111 가 되지 않는건가요? 
- 111과 33은 아스키코드순으로 비교할 필요가 없지 않나요? 자릿수가 다르니까 a < b를 할 필요가 없을텐데.. 왜 교안에는 아스키코드순으로 비교한다는 내용이 실려져 있는건가요? 없어도 되는 내용인것 같은데…. 실려져 있어서 제가 잘못 알고있는건지 너무 헷갈립니다… 
답변 1
1
안녕하세요 0825님 ㅎㅎ
111은 이제 33과 비교를 하게 됩니다. if문에 해당이 되지 않기때문에 바로 return a.size() < b.size() 를 하게 됩니다. a가 111, 33이 b이고 a의 size는 3, b의 size는 2입니다. 결과적으로 F가 됩니다
>> 네 맞습니다.
bool compare(string a, string b){
	if(a.size() == b.size()) return a < b; 
	return a.size() < b.size();
}  111과 33을 하게 되면 false가 나오게 됩니다.
- F가 되면 순서를 바꾸는건가요? 그렇담 왜 33,222,111 가 되지 않는건가요? 
>> 순서를 바꾸기는 하지만 그렇게 한번만 바꾸지는 않습니다.
이 compare의 역할은 SORT의 compare함수를 만드는 것입니다. sort함수는 내부적으로 순서가 여러번 변경되며 이를 우리가 파악하기는 어렵습니다. 다만, 기본적으로 < 오퍼레이터에 맞춰 compare함수를 만들어주어야 합니다.
그렇게 한 뒤 sort를 작동시키게 되면 해당 기준에 맞춰서 정렬되는 것을 볼 수 있게 됩니다.
즉,
111 과 33 : false -> 33, 111이라는 순서.
111과 222 : true -> 111, 222 라는 순서.
33과 222 : true -> 33, 222라는 순서.
등을 기반으로.
정렬이 일어나서 33, 111, 222가 완성되게 됩니다.
111과 33은 아스키코드순으로 비교할 필요가 없지 않나요?
>> 해당 부분은 자리로 비교하게 됩니다.
	return a.size() < b.size();
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.






