백준알고리즘

백준알고리즘:p1181 단어정렬

socialcomputer 2021. 4. 7. 00:08
반응형

분류: 정렬

 

문제

즉, 길이가 짧은게 먼저 나오도록 하고 길이가 같다면 알파벳순으로 정렬해라.

중복은 제거해라. 

 

코드

//백준알고리즘 제출시 클래스 이름은 Main으로 바꿔야 됨 
package sort;

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

public class p1181 {

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int n = Integer.parseInt(br.readLine());
		ArrayList<String> list = new ArrayList<>();
		for(int i=0; i<n; i++) {
			list.add(br.readLine());
		}
		//hashSet으로 중복제거
		HashSet<String> set = new HashSet<String>(list);
		ArrayList<String> list2 = new ArrayList<>(set);
		
		Collections.sort(list2,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();
				}
			}
		});
		
		StringBuilder sb = new StringBuilder();
		for(String li : list2) {//중복제거로 list2의 길이가 list와 달라졌기 때문에 이렇게 해야됨.
			sb.append(li+"\n");
		}
		System.out.print(sb);
		
	}

}

▶comparator 인터페이스 사용해서 풀기.

compare 메소드 오버라이드 할때: 

길이가 같으면 알파벳순인데 처음에 s1과 s2의 charAt(0)만 비교해서 틀림

-> compareTo를 이용해 return 해줬음.

 

this.compareTo(another)는 this>another 이면 양수, this=another 이면 0, this<another이면 음수 리턴함

 


채점결과

 

링크 www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

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

www.acmicpc.net

 

반응형