cth5132   5년 전

왜 틀리는 것인지 모르겠습니다

nothappa   5년 전

일단 std::sort함수는 자동으로 오름차순 정렬되고, pair를 sort에 넣을 경우, fisrt 중복시 second도 오름차순 정렬됩니다.

그리고 왜 sort(d)가 아니라 d+1인가요?

차라리 d[1] 등으로 바꾸거나, 값 인풋을 i=0으로 시작해보시는것도 어떤가 싶습니다.

cth5132   5년 전

nothappa님 감사합니다

근데 전  pair의 second로 d[]배열을 오름차순정렬 하고싶어서 저렇게 한거거든요
pair의 second로 정렬하고싶을때 저렇게 하는게 아닌건가요?

djm03178   5년 전

끝나는 시간만으로 정렬하면 안 된다는 글이 다른 질문들에 많이 있습니다.

정렬 자체에는 문제 없어보입니다.

cth5132   5년 전

네...

근데 compare 함수를 안쓰고 20번째 라인에서 

scanf("%d %d", &d[i].second, &d[i].first); 로 받아서 sort(d+1, d+N+1)로 정렬한 후 

26~29 라인의 로직에서 second와 first 자리만 바꾸면 통과가 되더라구여 

로직이 안변했기 때문에 끝나는 시간만으로 정렬해도 통과는 되는것을 확인했는데

왜 정렬을 저렇게 하면 안되는지가 아직도 해결되지않았습니다 ㅜㅠ

djm03178   5년 전

맞은 코드를 봤는데 끝나는 시간만으로 정렬하지 않았습니다. 맞은 코드 2개 모두 sort 함수에 compare 함수를 전달하지 않고 있으니까요.

그러면 pair<int, int>의 기본 비교 연산자가 적용되는데, pair의 기본 비교 연산자는 다음과 같습니다.

  1. first가 작은 순
  2. first가 같다면, second가 작은 순

맞으신 코드에서 끝나는 시간을 first, 시작하는 시간을 second에 넣어주셨으니 끝나는 시간이 같다면 시작하는 시간이 이른 순으로 정렬되어야 하고, 실제로 compare를 직접 짠다고 해도 이렇게 해야 합니다.

왜 끝나는 시간만으로 정렬하면 안 되는지는 https://www.acmicpc.net/board/... 에도 설명되어 있습니다.


cth5132   5년 전

아아 정말 감사합니다

댓글을 작성하려면 로그인해야 합니다.