반응형
어떻게 풀면 좋을지 고민하다 제한해둔 시간이 지나서 답을 찾아보았다.
sort메서드의 compare 함수를 재정의 하여 내가 원하는대로 정렬할 수 있는 방법이 있었다.
1등 코드
메모리 : 18252 KB
시간 : 164 ms
코드길이 : 2755 B
내 코드
메모리 : 25700 KB
시간 : 328 ms
코드길이 : 898 B
[상위 코드] - 1등과의 차이가 꽤 남 ( 21260 KB, 244 ms, 1103 B )
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
try {
int N = Integer.parseInt(br.readLine());
ArrayList<ArrayList<String>> lengthMemo = new ArrayList<>();
for(int i = 0 ; i <= 50 ; i++) {
lengthMemo.add(new ArrayList<String>());
}
for(int i = 0 ; i < N ; i++) {
String line = br.readLine();
lengthMemo.get(line.length()).add(line);
}
for(int i = 1 ; i <= 50 ; i++) {
lengthMemo.get(i).sort(null);
String prev = "";
for(int j = 0 ; j < lengthMemo.get(i).size() ; j++) {
if(lengthMemo.get(i).get(j).equals(prev)) continue;
bw.write(prev = lengthMemo.get(i).get(j));
bw.newLine();
}
}
bw.flush();
} catch(Exception e) {
e.printStackTrace();
}
}
}
[내 코드]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
String[] arr = new String[N];
for(int n = 0; n < N; n++) {
arr[n] = br.readLine();
}
Arrays.sort(arr, new Comparator<String>() {
public int compare(String str1, String str2) {
if(str1.length() == str2.length()) //길이가 같으면 알파벳 비교
return str1.compareTo(str2); //아스키코드 값이 더 작은 문자열이 앞에 정렬
else
return str1.length() - str2.length(); //길이가 더 짧은 문자열이 앞에 정렬
}
});
//동일한 문자열 제거
sb.append(arr[0]).append('\n');
for(int i = 1; i < N; i++) {
if(!(arr[i].equals(arr[i-1]))) // 같지 않으면
sb.append(arr[i]).append('\n'); //삽입
}
System.out.println(sb);
}
}
반응형
'알고리즘 > 정렬' 카테고리의 다른 글
[백준] 1931 : 회의실 배정 (JAVA) (0) | 2025.04.28 |
---|---|
[백준] 10815 : 숫자카드 (0) | 2023.04.03 |
[백준] 11399 : ATM (0) | 2023.04.01 |