반응형
문제
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
- 길이가 짧은 것부터
- 길이가 같으면 사전 순으로
입력
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
출력
조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다.
테스트 케이스
접근
1. 몇 개의 문자를 받을지 입력받습니다.
2.(1)에서 입력한 수만큼 문자를 입력받습니다.
3. 받은 문자들을 comparator를 이용하여 길이 순으로 정렬해주고 같은 문자열이 있다면 제외시킵니다.
4. 정렬된 문자열을 출력해줍니다.
코드
import java.awt.desktop.SystemEventListener;
import java.io.*;
import java.math.*;
import java.util.*;
public class Main {
/*
1181 problem
*/
public static void main(String[] args) throws NumberFormatException, IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int num = Integer.parseInt(br.readLine());
ArrayList<String> list = new ArrayList<>();
for(int i=0; i<num; i++) {
String str = br.readLine();
if(!list.contains(str))
list.add(str);
}
int size = list.size();
Collections.sort(list,new Comparator<String>() {
public int compare(String s1, String s2) {
if(s1.length() > s2.length())
return 1;
else if(s1.length() < s2.length())
return -1;
else
return s1.compareTo(s2);
}
});
for(int i=0; i<size; i++) {
bw.write(list.get(i)+"\n");
}
bw.flush();
br.close();
bw.close();
}
}
주의
comparator안쓰고 그냥 정렬하니 시간 초과가 났다
반응형
'공부 정리 > 백준' 카테고리의 다른 글
[백준] 자바 1018 체스판 다시 칠하기 (0) | 2021.08.23 |
---|---|
[백준] 자바 11650 좌표 정렬하기 (0) | 2021.08.20 |
[백준] 자바 7568 덩치 (0) | 2021.08.18 |
[백준] 자바 3009 네 번째 점 (0) | 2021.08.17 |
[백준] 자바 4153 직각삼각형 (0) | 2021.08.16 |
댓글