단어 정렬
시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 | 256 MB | 69787 | 28697 | 21343 | 40.318% |
문제
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
- 길이가 짧은 것부터
- 길이가 같으면 사전 순으로
입력
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
출력
조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다.
풀이
두 방법을 생각해보았다.
1) 문자열을 기록하는 배열과 글자수를 저장하는 배열을 만든 후 글자수에 따라 먼저 배치한 뒤 사전순으로 배열한다
2) 문자열을 기록한 뒤 사전 순으로 배치하고 글자수를 센다.
두번째 방법이 조금 더 효율적인 것 같았다. Arrays.sort로 적용한 뒤 글자 길이에 대해서만 나열하면 되기 때문이다
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
String[] words = new String[N]; //글자를 저장하는 배열
for(int i=0;i<N;i++) {
words[i] = br.readLine(); //글자를 넣어준 뒤
}
Arrays.sort(words); //Arrays.sort를 이용해 사전순 배치를 한다
for(int i=1;i<51;i++) {
String save = ""; //중복되는 글자를 쓰지 않기 위해 저장 변수 설정
for(int j=0;j<N;j++) {
if(words[j].length()==i && !words[j].equals(save)) {
//문자열의 비교는 equals를 쓴다
save=words[j]; //사용했던 글자를 save에 저장
bw.write(words[j]+"\n");
}
}
}
bw.flush();
bw.close();
}
}
'Study > Baekjoon' 카테고리의 다른 글
Baekjoon2108: 통계학 (0) | 2021.11.09 |
---|---|
Baekjoon10814: 나이순 정렬, 2차원 ArrayList (0) | 2021.11.09 |
Baekjoon11650,11651: 좌표 정렬하기 (0) | 2021.11.06 |
Baekjoon1427: 소트인사이드, System.in.read(); (0) | 2021.11.05 |
Baekjoon10989: 수 정렬하기 3, 카운팅 정렬 (0) | 2021.11.04 |