코딩테스트

[BOJ_1181/JAVA] 단어 정렬

Eun 2021. 12. 16. 13:22

https://www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

www.acmicpc.net

문제

풀이

자바에서는 객체 비교하는 `Comparator` 클래스가 있다.

사용법은 `Comparator` 클래스를 생성하여 내부에 `compare`메서드를 원하는 정렬 기준대로 구현하여 사용한다.

`compare` 메서드는 파라미터를 빼주어 값이 0이거나 음수면 자리바꿈을 하지 않고 양수면 자리바꿈을 수행하는 메서드이다.

리턴 값은 아래 3가지이다.

- 양의 정수 : 자리바꿈

- 0 : 자리안바꿈

- 음의 정수 : 자리안바꿈

 

예를 들자면, {3,2,5} 배열이 있다. 3-2를 할경우 양의 정수이므로 자리를 바꿔준다. 하지만 2-5 일경우는 음의 정수이므로 자리를 안바꿔준다. 이처럼 정렬을 해주는 메소드이다. 

보통

- Arrays.sort()

- Collections.sort()

와 같이 쓰인다.

 

이제 문제를 풀어보자.

조건을 보면 단어 길이가 같을 경우 '사전순'으로 정렬해야한다.

따라서 1차적으로 단어 길이를 통해 정렬을 하고 같은 길이면 사전순으로 정렬을 해야한다.

단어 사전순 정렬은 `compareTo` 메서드를 쓰면 된다.

 

또 다른 조건은 같은 단어를 여러 번 입력하면 한번만 출력되도록 해야한다.

따라서 for문을 돌면서 앞뒤로 같은 문자(equals)가 아닌 것만 출력하도록 하였다.

코드

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

public class BOJ1181 {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		
		int num = Integer.parseInt(br.readLine());
		String []input = new String[num];
		
		for(int i=0;i<num;i++) {
			input[i] = br.readLine();
		}
		
		Arrays.sort(input, new Comparator<String>() {			
   	 		@Override
   	 		public int compare(String s1, String s2) {
   	 		if(s1.length() == s2.length()) {
   	 			return s1.compareTo(s2);			
   	 		}else {
   	 			return s1.length() - s2.length();
   	 		}
   	 		
   	 	}
   	 	});
		
		sb.append(input[0]+"\n");
		
		for(int i=1;i<num;i++) {
			if(!input[i].equals(input[i-1])){
				sb.append(input[i]+"\n");
			}
		}
		
		
		System.out.println(sb);

	}

}

 

 

'코딩테스트' 카테고리의 다른 글

[BOJ_9093/JAVA] 단어뒤집기  (0) 2021.12.16
[BOJ_17413/JAVA] 단어뒤집기2  (0) 2021.12.16
[BOJ_4344/JAVA] 평균은 넘겠지  (0) 2021.12.15
[BOJ_1406/JAVA] 에디터  (0) 2021.12.15
[BOJ_1874/JAVA] 스택 수열  (0) 2021.12.14