반응형
Notice
Recent Posts
Recent Comments
Link
지구정복
[정렬] 백준 - 나이순 정렬 본문
728x90
반응형
https://www.acmicpc.net/problem/10814
-문제해설
먼저 자바로는 사용자 클래스를 정의하고 Arrays.sort 익명함수를 이용해서 사용자 객체를 정렬했다.
사용자 객체의 필드값으로는 나이, 이름, 회원가입한 순서 3가지가 있고
익명함수를 재정의할 때는 나이가 같은 경우 회원가입순서를 오름차순으로 정렬하고
그 외에는 나이를 오름차순 정렬한다.
파이썬에서는 리스트를 이용해서 풀어봤다.
자바에서도 배열로 풀면 훨씬 성능이 좋을 것 같다.
리스트 풀이 경우 빈 리스트를 만들고 나이가 리스트의 인덱스값, 이름이 해당 인덱스의 값으로 들어간다.
예를 들어 21 Jonh 인 경우
arr[21] = 'John' 처럼 들어간다.
이때 맨 처음 빈 리스트의 크기를 나이의 최대값인 200이 허용되도록 201크기로 초기화해줘야 한다.
근데 파이썬 맨 처음 풀이는 성능이 별로 좋지않아서 백준에서 성능 좋은 코드를 참고해서 한 번 더 풀어봤다.
-자바
package sort;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;
public class BJ10814 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt( br.readLine() );
StringTokenizer st;
AgeName[] an = new AgeName[n];
for( int i=0; i<n; i++ ) {
st = new StringTokenizer( br.readLine() );
an[i] = new AgeName( Integer.parseInt( st.nextToken() ), st.nextToken(), i );
}
Arrays.sort( an, new Comparator<AgeName>() {
@Override
public int compare(AgeName o1, AgeName o2) {
if( o1.age == o2.age ) return o1.num - o2.num;
return o1.age-o2.age;
}
});
StringBuffer sb = new StringBuffer();
for( int i=0; i<n; i++ ) sb.append( an[i].age + " " + an[i].name + "\n" );
System.out.println( sb );
}
}
class AgeName {
int age;
String name;
int num;
public AgeName(int age, String name, int num) {
this.age = age;
this.name = name;
this.num = num;
}
}
-파이썬( 리스트 이용 )
n = int(input())
arr = [ [] for _ in range( 201 ) ]
for i in range( n ):
a, b = input().split()
arr[int(a)].append( b )
for i in range( len(arr) ):
if arr[i] != []:
for j in range( len(arr[i]) ): print( i, arr[i][j] )
-파이썬( lens0022 님 코드 참고 )
from sys import stdin, stdout
arr = [ [] for _ in range( 201 ) ]
for line in stdin.read().splitlines(True)[1:]:
arr[ int( line.split()[0] ) ].append( line )
stdout.write( ''.join( ''.join( u ) for u in arr ) )
728x90
반응형
'데이터 엔지니어링 정복 > Algorithm' 카테고리의 다른 글
[정렬] 백준 - 좌표 정렬하기 (0) | 2021.07.27 |
---|---|
[정렬] 백준 - 수 정렬하기 3 (0) | 2021.07.26 |
[브루트포스] 백준 - 덩치 (0) | 2021.07.26 |
[정렬] 버블, 선택, 삽입, 병합, 퀵 정렬 Java 코드 (0) | 2021.07.26 |
[정렬] 백준 - 수 정렬하기 2 (0) | 2021.07.26 |
Comments