[백준 1181번 : 단어 정렬] java 풀이

Elmo·2022년 7월 27일
0

[백준] 알고리즘

목록 보기
14/42
post-custom-banner

처음에 Arrays.sort()를 확장하여 풀려고 시도했으나 이해가 부족했는지 실패하고 결국 선택정렬을 이용해서 풀어냈다.

인터넷 검색을 통해서 풀이를 봤더니 Arrays.sort()의 compare 메소드를 이해할 수 있었다.

int 배열을 Arrays.sort로 정렬할 때 compare 메소드에서는 보통 e1-e2 값을 return 한다. e1-e2 값이 0이면 같고, 양수이면 e1이 크고, 음수이면 e2가 크다는 것을 이용한 것이다.

return 값의 의미를 제대로 이해하지 못해서 Arrays.sort에서 compare 메소드 오버라이드를 제대로 해내지 못했었다.

참고링크: https://st-lab.tistory.com/112

이 문제에서는 int가 아닌 String 배열을 이용하기 때문에 (e1 - e2) 값이 아닌 compareTo 메소드를 이용한다.

참고로 자바에서 문자열끼리 비교할 때는 ==가 아닌 compareTo를 써야한다. ==은 object가 동일한지 아닌지를 판단하기 때문이다.

🔑 java 풀이 (선택정렬)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int N = Integer.parseInt(br.readLine());
		String list[]=new String[N];
		for(int i=0; i<N; i++) 
			list[i] = br.readLine();
		
		for(int i=0; i<N; i++) 
		{
			for(int j=i+1; j<N; j++) 
			{
				if(list[i].length()==list[j].length()) {
					if(list[i].compareTo(list[j])>0) {
						String tmp = list[j];
						list[j]=list[i];
						list[i]=tmp;
					}
				}
				else {
					if(list[i].length()>list[j].length()) {
						String tmp = list[j];
						list[j]=list[i];
						list[i]=tmp;
					}
				}
			}
		}
		for(int i=0; i<N; i++) {
			if(i!=0) {
				if(list[i].compareTo(list[i-1])!=0)
					System.out.println(list[i]);
			}
			else
				System.out.println(list[i]);
		}
	}
}

🔑 java 풀이 (Arrays.sort)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;

public class Main {
	
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int N = Integer.parseInt(br.readLine());
		String list[]=new String[N];
		for(int i=0; i<N; i++) 
			list[i] = br.readLine();
		
		Arrays.sort(list, new Comparator<String>(){
			@Override
			public int compare(String o1, String o2) {
				if(o1.length()==o2.length())
					return o1.compareTo(o2);
				else
					return o1.length()-o2.length();
			}
		});
		for(int i=0; i<N; i++) {
			if(i!=0) {
				if(list[i].compareTo(list[i-1])!=0)
					System.out.println(list[i]);
			}
			else
				System.out.println(list[i]);
		}
	}
}


선택정렬과 Arrays.sort를 사용했을 때의 시간차이가 꽤 난다ㄷㄷ

profile
엘모는 즐거워
post-custom-banner

0개의 댓글