[알고리즘]_문자열_단어정렬(백준 No.1181)

yerim·2023년 3월 13일
0

문제

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

길이가 짧은 것부터
길이가 같으면 사전 순으로
단, 중복된 단어는 하나만 남기고 제거해야 한다.


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


출력
조건에 따라 정렬하여 단어들을 출력한다.


코드

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

public class No_1181 {
	public static void main(String[] args) throws IOException {
		BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
		int N=Integer.parseInt(br.readLine());
		HashSet<String>input=new HashSet<>();
		List<String>output=new ArrayList<>();

		for(int i=0;i<N;i++){
			input.add(br.readLine());
		}

		Iterator<String> iterator=input.iterator();
		while (iterator.hasNext()){
			output.add(iterator.next());
		}

		Collections.sort(output);
		Collections.sort(output,(String s1,String s2)-> s1.length()-s2.length());
		for (String s:output) {
			System.out.println(s);
		}
	}
}

풀이

  • 문제 조건에 '중복되는 단어는 모두 제거' 라는 조건이 있어 HashSet으로 입력받아 중복되는 단어들을 모두 제거했다.
  • Set은 인덱스를 통해 접근할 수 없고 순서가 정해져 있지 않으므로 Iterator로 List에 Set에 있는 단어들을 모두 넣었다.
  • 사전순서대로 한번 정렬해주고
  • 문자열의 길이대로 정렬한다.
  • 정렬이 끝난 문자열들을 출력한다.

마무리

첨에 문제를 잘못읽어서 중복만 제거하고 정렬만하면 되는줄 알았는데 알고보니까 문자열 숫자대로 정렬하는 거였다.. 혹시나해서 찾아보니 문자열 길이대로 정렬하는 코드가 있더라아 ~~~ 천재님들 만재님들 감사합니댜

0개의 댓글