inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

교안 compare 함수 질문

190

ymh_0825

작성한 질문수 2

0

안녕하세요 큰돌님. 120p string으로 이루어진 배열을 정렬한 코드에 대해 질문드립니다.

제가 이해한 바로는 compare라는 함수는 문자열의 길이를 비교하는 함수입니다.

  1. if(a.size() == b.size()) return a < b; 는 문자열의 길이가 같으면 a b 크기를 비교합니다. 이 때 비교하는 기준은 아스키 코드입니다.

  2. 만약 문자열의 길이가 같지 않으면 크기를 비교해서(아스키코드 기준) 바로 boolean 값을 반환합니다.

  3. 111은 222와 아스키코드적으로 비교를 하게되는데.. 이때 1의 아스키코드는 49이고 2의 아스키 코드는 50입니다. 111이 a, 222가 b 이니까 a < b 는 T가 됩니다.

  4. 111은 이제 33과 비교를 하게 됩니다. if문에 해당이 되지 않기때문에 바로 return a.size() < b.size() 를 하게 됩니다. a가 111, 33이 b이고 a의 size는 3, b의 size는 2입니다. 결과적으로 F가 됩니다.

여기서 드리고 싶은 질문은

  1. F가 되면 순서를 바꾸는건가요? 그렇담 왜 33,222,111 가 되지 않는건가요?

  2. 111과 33은 아스키코드순으로 비교할 필요가 없지 않나요? 자릿수가 다르니까 a < b를 할 필요가 없을텐데.. 왜 교안에는 아스키코드순으로 비교한다는 내용이 실려져 있는건가요? 없어도 되는 내용인것 같은데…. 실려져 있어서 제가 잘못 알고있는건지 너무 헷갈립니다…

c++ 코딩-테스트

답변 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가 나오게 됩니다.

 

 

  1. 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점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.



4 - A

0

20

2

코딩살구클럽 입장이 안됩니다

0

55

2

4-F 경우의 수 질문입니다.

0

31

2

코딩살구클럽 가입이 안됩니다.

0

65

2

살구 클럽에 대한 질문있습ㄴ디ㅏ

0

54

1

교안 158페이지 문의드립니다

0

44

2

코딩살구클럽 관련 건의사항

0

110

1

코살에 19942 다이어트 문제에 N의 범위가 빠져있슴니다

0

44

1

진행 방법 질문드립니다!

0

79

2

2-I) 왜 이 문제가 그래프이론 카테고리에 있는지 잘 모르겠습니다.

0

63

2

2주차 개념#12 트리 순회

0

32

2

백준사이트가 종료된다고 합니다.

0

313

2

백준 서비스 종료

9

944

1

sk 하이닉스 코테 대비

0

384

2

3-G 최댓값 질문

0

54

1

모듈러 연산 값이 10이 아닌 경우도 있지 않나요?

0

84

2

3-I 코드 질문드립니다.

0

63

2

3-N 질문 있습니다.

0

68

2

학습방법

0

105

2

4-H 질문 있습니다 (코드 리뷰)

0

68

2

코딩테스트 어디까지 준비해야 하는지 질문이 있습니다.

0

182

2

2-O 반례가 무엇일지 어떤 부분이 틀렸는지 잘 모르겠습니다.

0

71

2

2주차 개념 #4-2. 인접행렬 질문있습니다.

0

65

2

1-A 문제풀이 후 궁금한 점이 생겨서 질문드립니다.

0

53

2