백준 알고리즘 문제(85) - 단어 정렬

Code_Alpacat·2021년 9월 16일
0

이전 문제들에서 comparator 메소드를 이용해서 문제를 풀었는데, 간단하게 형태만 외우는게 아니라 이해도가 확실히 필요했다.
쉽게 사용할 수 있게 정리하자면, compare를 통한 compareTo 메소드는 자기자신 s1과 다른 매개변수를 비교해서 양수면 자리를 바꿔주고, 음수 or 0이면 그대로 진행한다. 그리고 comparator은 두 매개변수를 직접 비교하므로 s1.length() - s2.length로 비교해서 양수면 바꿔준다.

Integer.compare(s1.length(), s2.length())도 같은 방법이다.

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


public class java_io {
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	public static void main(String[] args) throws IOException {
		int N = Integer.parseInt(br.readLine());
		
		String[] arr = new String[N];
		
		for(int i = 0; i<N; i++) {
			arr[i] = br.readLine();
		}
		
		Arrays.sort(arr, new Comparator<String>() {
			//compare을 오버라이드
			public int compare(String s1, String s2) {
				//s1을 s2와 비교해서 int로 만듬. 아스키코드 차이를 통해 사전에서 오름차순
				if(s1.length()  == s2.length()) {
					//s1>s2 이면 양수 return 및 자리 바뀜.
					return s1.compareTo(s2);
				}
				//s1길이 - s2 길이가 양수라면 작은 수인 s2가 뒤이므로 오름차순에 의해 순서를 바꿈
				else {
					return s1.length() - s2.length();
				}
			}
		});
		
		StringBuilder sb = new StringBuilder();
		
		sb.append(arr[0]).append('\n');
		
		for(int i=1; i<N; i++) {
			//중복 제거, equals는 변수 주소가 아닌 내용을 비교
		    if(!arr[i].equals(arr[i-1])) {
		    	sb.append(arr[i]).append('\n');
		    }
		    
		}
		
		System.out.println(sb);
		}
		
		
	} //출처 : Stranger's lab

스스로 풀려고 노력해봤는데 이해도가 많이 부족했던 모양이다. 그렇게 어려운 개념은 아니었는데. 결국 두 매개변수를 어떻게 비교해주고 바꿔주느냐의 문제였다.

profile
In the future, I'm never gonna regret, cuz I've been trying my best for every single moment.

0개의 댓글