💻 Algorithm/Baekjoon

[JAVA] 백준 1191 - 단어 정렬

dlalwl_jpg 2022. 8. 2. 16:56

실버V

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

 

1181번: 단어 정렬

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

www.acmicpc.net

문제

알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.

  1. 길이가 짧은 것부터
  2. 길이가 같으면 사전 순으로

입력

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


출력

조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다.


접근 방법

comparator를 이용하여 길이가 같으면 단어의 문자로 오름차순 정렬을 하고, 같이 않으면 단어의 길이를 비교하여 오름차순으로 정렬하였다.


코드 

package bj1181;

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

public class bj1181 {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		ArrayList<String> arr = new ArrayList<>();
		int check = 0;

		//입력할 단어 개수 입력
		int num = Integer.parseInt(br.readLine()); 
		String[] w = new String[num];
				
		//단어 입력
		for(int i = 0; i < num; i++) {
			w[i] = br.readLine(); //단어 입력
			check = 0; //중복 확인 변수
			
			for(int j = 0; j < i; j++) { //중복 검사
							
				if(w[i].equals(w[j])) //같은 단어가 있으면
					check = 1;			
			}
			
			if(check == 0) { //중복되지 않는 단어만 arr에 넣기
				arr.add(w[i]);
			}
		}
		
		//word에 단어 넣기
		String[] word = new String[arr.size()];
		
		for(int i = 0; i < arr.size(); i++) 
			word[i] = arr.get(i);
		
		//오름차순 정렬
		Arrays.sort(word, new Comparator<String>(){
			
			public int compare(String w1, String w2) {
				
				//단어의 길이가 같다면
				if(w1.length() == w2.length()) 
					return w1.compareTo(w2);
				else
					return w1.length() - w2.length();
			}
		});
		
		//결과 출력
		for(int i = 0; i < arr.size(); i++) 
			System.out.println(word[i]);
	}

}

NOTE

new Comparator를 사용하여 오름차순 정렬을 할 때 문자열끼리 비교할 때는 compareTo()를 사용하면 된다.

'💻 Algorithm > Baekjoon' 카테고리의 다른 글

[JAVA] 백준 9012 - 괄호  (0) 2022.08.02
[JAVA] 백준 10866 - 덱  (0) 2022.08.02
[JAVA] 백준 10814 - 나이순 정렬  (0) 2022.07.31
[JAVA] 백준 11050 - 이항 계수1  (0) 2022.07.17
[JAVA] 백준 11651 - 좌표 정렬하기2  (0) 2022.07.17