Logo
(追記) (追記ここまで)

정렬 순서 질문

11652번 - 카드

첫 번째 코드는 key가 작은순으로 정렬을 하고 Value가 큰 순서대로 정렬
두 번째 코드는 Value가 큰 순서대로 정렬을 하고 key가 작은순서로 정렬

왜 첫 번째 코드는 통과하는데 두 번째 코드는 틀릴까요?

정렬 우선순위가 달라지기 때문입니다.

전자의 경우 Value 기준으로 내림차순, Value가 같은 경우 Key가 작은 게 먼저 옵니다.

후자의 경우 Key 기준으로 오름차순, Key가 같은 경우 Value가 큰 게 먼저 옵니다.

즉, 두 정렬 방법의 결과가 다를 수 있습니다.

추가로 정렬을 두 번 이상 적용하여 정렬의 우선순위를 정하는 것은 정렬이 안정적(stable)인 경우에만 사용할 수 있습니다.

정렬이 안정적이지 않을 경우(unstable) 아래 풀이와 같이 한 번의 정렬로 정렬 우선순위를 구현할 수 있습니다.
[풀이] https://www.acmicpc.net/source...

안정/불안정 정렬은 아래 글을 읽어보시면 좋을 것 같습니다.
[Stable Sort, Unstable Sort] https://mindock.github.io/algo...

감사합니다.

이 코드는 뭐가 문제일까요?

한번의 정렬에서 value가 같으면 key가 작은 순서대로
value가 다르면 큰 순서대로 정렬 하고 있습니다!

자바에서 객체를 대상으로 한 ==, < 등의 연산자는 객체의 값을 기준으로 비교하는 것이 아닌 객체의 주솟값을 비교합니다.

따라서 객체끼리 비교 시에는 equals나 compareTo를 사용하셔야 합니다.

[풀이] https://www.acmicpc.net/source...

[참조] https://velog.io/@ilil1/%EC%9E...

와 정말 감사합니다 지식의 밑천이 많이 드러난 풀이였네요

자바에서의 == 은 객체의 주솟값을 비교

문자열 equals()는 오버라이딩을 통해서 문자열 비교가 가능

기본 타입의 값들은 == 비교가 가능하지만

참조 타입의 값들은 compareTo를 사용 한다는 것까지 많이 배워 갑니다 ᄒᄒ

+ (getKey() - getKey() == 0) 객체의 값 - 객체의 값 == 0 을 비교하는 방식도 괜찮겠네요

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

(追記) (追記ここまで)

출처

대학교 대회

  • 사업자 등록 번호: 541-88-00682
  • 대표자명: 최백준
  • 주소: 서울시 서초구 서초대로74길 29 서초파라곤 412호
  • 전화번호: 02-521-0487 (이메일로 연락 주세요)
  • 이메일: contacts@startlink.io
  • 통신판매신고번호: 제 2017-서울서초-2193 호

AltStyle によって変換されたページ (->オリジナル) /