반응형
Notice
Recent Posts
Recent Comments
Link
지구정복
[정렬] 백준 - 단어 정렬 본문
728x90
반응형
https://www.acmicpc.net/problem/1181
-문제해설
처음에 중복제거하고 데이터 추가하려고 HashSet도 사용하고 일일이 이중 반복문 돌면서 길이짧은 거 비교하고 같으면 사전순 비교하고 했는데 너무 비효율적이고 하드코딩이라 노답이었다..
예전에 사용자객체 정렬 배웠던 기억이 있어서 처음에 사용자 객체만들고 Comparator객체 이용해서 풀었는데 시간이 엄청 오래 걸렸다. 단순하게 생각해보니깐 그냥 사용자객체 만들지 않고 익명함수 이용해서 할 수 있었다.
두 번째가 더 효율이 좋은 코드이다.
-자바( 사용자 객체 정렬 이용 - 시간 오래 걸림, 비효율적 )
package sort;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
public class BJ1181 {
private static int n;
private static ArrayList<String> t = new ArrayList<String>();
private static ArrayList<SortStr> al = new ArrayList<SortStr>();
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt( br.readLine() );
for( int i=0; i<n; i++ ) {
String tmp = br.readLine();
if( !t.contains( tmp ) ) {
t.add( tmp );
al.add( new SortStr( tmp.length(), tmp ) );
}
}
SortStr[] ss = (SortStr[])al.toArray( new SortStr[ al.size() ] );
Arrays.sort( ss, SortStr.strCom );
Arrays.sort( ss, SortStr.lenCom );
for( int i=0; i<ss.length; i++ ) System.out.println( ss[i].str );
}
}
class SortStr {
int len;
String str;
public SortStr(int len, String str) {
this.len = len;
this.str = str;
}
public static Comparator<SortStr> strCom = new Comparator<SortStr>() {
@Override
public int compare(SortStr o1, SortStr o2) {
return o1.str.compareTo( o2.str );
}
};
public static Comparator<SortStr> lenCom = new Comparator<SortStr>() {
@Override
public int compare(SortStr o1, SortStr o2) {
return o1.len - o2.len;
}
};
}
-자바( 바로 익명함수 이용해서 Comparator 객체 compare메소드 오버라이딩하기 - 시간 적게 걸림, 효율적 )
package sort;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
public class BJ1181_1 {
private static int n;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt( br.readLine() );
String[] arr = new String[n];
for( int i=0; i<n; i++ ) arr[i] = br.readLine();
Arrays.sort( arr, 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();
}
});
System.out.println( arr[0] );
for( int i=1; i<n; i++ ) {
if( !arr[i].equals( arr[i-1] ) ) System.out.println( arr[i] );
}
}
}
-파이썬
import sys
n = int( input() )
tmp = set()
for i in range( n ):
tmp.add( input() )
arr = list(tmp)
arr.sort( key=len )
print( "\n".join( arr ) )
728x90
반응형
'데이터 엔지니어링 정복 > Algorithm' 카테고리의 다른 글
[정렬] 백준 - 수 정렬하기 2 (0) | 2021.07.26 |
---|---|
[브루트포스] 백준 - 영화감독 숌 (0) | 2021.07.25 |
[수학] 백준 - 이항 계수 1 (0) | 2021.07.24 |
[수학] 백준 - 달팽이는 올라가고 싶다 (0) | 2021.07.24 |
[문자열] 백준 - 팰린드롬수 (0) | 2021.07.24 |
Comments