강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của soliloquiess
soliloquiess

câu hỏi đã được viết

Các khái niệm và vấn đề bạn phải biết trước khi thi viết code (với Java)

Bài toán ứng dụng 2) Bộ so sánh

Comparator 질문입니다.

Đã giải quyết

Viết

·

457

1

이강의 듣기 전에

https://st-lab.tistory.com/112

여기서 compareTo를  먼저 접했는데 

public int compare(String s1, String s2) {

// 단어 길이가 같을 경우

if(s1.length() == s2.length()} {

return s1.compareTo(s2); // 사전 순 정렬

}

// 그 외의 경우

else {

return s1.length() - s2.length();

}

}

});

이 부분과 이 강의에서 하는게 같은 걸까요? 이 코드에선  s1.compareTo(s2); 가 바로 오름차순 정렬? 이고 반대(return s1.length() - s2.length();)  가 내림차순 정렬같은데 Comparator 개념 잡기가 좀 힘드네요.. 알려주시면 감사하겠습니다.

java코테 준비 같이 해요!

Câu trả lời 2

1

Solioquies님의 프로필 이미지
Solioquies
Người đặt câu hỏi

자세한 예제랑 답변 정말 감사합니다. 자바로 코테를 준비한지 얼마 안 됐지만 저 comparator 부분을 볼 때마다 계속 어렵고 헷갈렸거든요. 유치하다 하셨는데 오히려 전 이해가 더 잘 되서 좋은 거 같아요. 다른 강의도 얼른 나왔으면 좋겠네요. 답변 감사합니다.

1

pushupman님의 프로필 이미지
pushupman
Người chia sẻ kiến thức

안녕하세요~~

CompareTo() 함수는 아주 중요합니다. 코테 뿐만 아니라 자바스프링 같은경우에도 많이 쓰여집니다.

코테를 안보고 과제를 주는 회사도 있습니다

과제는 자바스프링이 대한민국에서 99% 합니다.

제강의 sort 개념설명에 제일 처음에 나옵니다.  그리고 사람들이 이부분을 제대로 이해하지 않은 상태에서

Sort(), Comparator(), PriorityQueue() 를 쓰고 있습니다. 이 함수들의 내부에 CompareTo() 함수랑 같은 기능을 하는 compare가 있습니다.

1. 질문주신 내용 하기전에 기본개념 다시 설명 드리면,

제 예제입니다.    

 Integer  a = 1, b=3;

    System.out.println( a.compareTo(b) );  // -1

    System.out.println( a.compareTo(1) );  //  0

    System.out.println( a.compareTo(0) );  //  1

a, b를   a.compareTo(b) 이렇게 표현하고 ,이때 오름 차순으로 a=1, b=3 이면

-1이 리턴됩니다. 이해 돼셨나요?

a, b를   a.compareTo(b) 이렇게 표현하고 ,이때 내림 차순 으로 a=3, b=1 이면

1이 리턴됩니다. 이해 돼셨나요?

강의중에는 유치해서 표현 안했는데 저는 이렇게 외웁니다. "오름마" 걸음마 응용버젼 ㅋ

a.compareTo(b) 이렇게 표현이 기본상태에서, 오름차순 값이 있는데 ,마이너스 1 리턴

왜 마이너스 1이냐? 그건 만든 사람이 그렇게 정한겁니다. 1-3 하면 =-2가 나오니까 -1로 리턴하자 하고 만든겁니다.

다음부터는 강의에 넣어야 겠네요

자 그럼 질문 주신 문제를 풀어 보겠습니다.

public int compare(String s1, String s2) {

// 단어 길이가 같을 경우

if (s1.length() == s2.length()) {

return s1.compareTo(s2);

}

// 그 외의 경우

else {

return s1.length() - s2.length();

}

}

  => Arrays.sort         compare(s1, s2) 에서 -1을리턴하면 오름차순, 0을 리턴하면 동일값, 1을 리턴하면 내림차순인데 이문제에서는 문자의 길이를 가지고 리턴합니다.이해하셨나요?

이렇게하면 오름차순으로 나옵니다.

Arrays.sort(arr, new Comparator<String>() {

public int compare(String s1, String s2) {

// 단어 길이가 같을 경우

if (s1.length() == s2.length()) {

return s1.compareTo(s2);

}

// 그 외의 경우

else {

return s1.length() - s2.length();

}

}

});

내림차순은

Arrays.sort(arr, new Comparator<String>() {

public int compare(String s1, String s2) {

// 단어 길이가 같을 경우

if (s1.length() == s2.length()) {

return s1.compareTo(s2);

}

// 그 외의 경우

else {

return s2.length() - s1.length(); //순서 바꿔치기 하면 내림차순

}

}

});

더 충격적인건 오름차순 이렇게 해도 됩니다.( 저위에 긴문장을 한라인으로 대체) 람다식입니다.

Arrays.sort(arr, (a,b) -> a.length() - b.length());

내림차순

Arrays.sort(arr, (a,b) -> b.length() - a.length());

주신 예제 풀소스입니다

package Sort;

 

import java.util.Arrays;

import java.util.Comparator;

 

public class CompareTest {

public static void main(String[] args) {

 

String[] arr = { "13", "i", "more", "im" };

 

Arrays.sort(arr, new Comparator<String>() {

public int compare(String s1, String s2) {

// 단어 길이가 같을 경우

if (s1.length() == s2.length()) {

return s1.compareTo(s2);

}

// 그 외의 경우

else {

return s1.length() - s2.length();

}

}

});

 

// Arrays.sort(arr, (a,b) -> b.length() - a.length());

 

System.out.println(arr[0]);

 

for (int i = 1; i < arr.length; i++) {

// 중복되지 않는 단어만 출력

if (!arr[i].equals(arr[i - 1])) {

System.out.println(arr[i]);

}

}

}

 

}

쓰다 보니까 너무 길어져서 강의를 만들어야겠네요. 솔직히 이 내용이 전부 녹아 있는게 제 강의 인데

개념설명문제에 만들어야겠습니다

Hình ảnh hồ sơ của soliloquiess
soliloquiess

câu hỏi đã được viết

Đặt câu hỏi