방명록
- [백준 / 자바] 1181번 단어 정렬2024년 01월 26일 16시 32분 51초에 업로드 된 글입니다.작성자: 민발자728x90
https://www.acmicpc.net/problem/1181
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
문제
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
- 길이가 짧은 것부터
- 길이가 같으면 사전 순으로
단, 중복된 단어는 하나만 남기고 제거해야 한다.
입력
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
13 but i wont hesitate no more no more it cannot wait im yours
출력
조건에 따라 정렬하여 단어들을 출력한다.
i im it no but more wait wont yours cannot hesitate
풀이
Comparator에 대한 설명은 자바의 정석 127~134강 ch11 컬렉션 프레임웍(2) 포스팅 참고
public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); String[] a = new String[n]; for(int i = 0; i < n; i++) { a[i] = br.readLine(); } Arrays.sort(a, new Comparator<String>() { @Override public int compare(String o1, String o2) { if(o1.length() == o2.length()) { return o1.compareTo(o2); // 사전순 정렬 } else { return o1.length() - o2.length(); // 길이 } } }); StringBuilder sb = new StringBuilder(); sb.append(a[0]).append('\n'); for(int i = 1; i < n; i++) { if(!a[i].equals(a[i-1])) { sb.append(a[i]).append('\n'); } } System.out.println(sb); } }
728x90다음글이 없습니다.이전글이 없습니다.댓글