본문 바로가기
Algorithm

백준 11650 / 좌표 정렬하기

코동이 2020. 7. 9.
import java.io.*;
import java.util.*;

public class Main {
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int num = Integer.parseInt(br.readLine());
		List<String> list = new ArrayList<>();
		for(int i=0;i<num;i++) {
			list.add(br.readLine());
		}
		Collections.sort(list, new Comparator<String>() {
			@Override
			public int compare(String s1, String s2) {
				int num1 = Integer.parseInt(s1.split(" ")[0]);
				int num2 = Integer.parseInt(s2.split(" ")[0]);
				if(num1-num2<0) {
					return -1;
				}
				if(num1-num2==0) {
					int num3 = Integer.parseInt(s1.split(" ")[1]);
					int num4 = Integer.parseInt(s2.split(" ")[1]);
					return num3-num4;
				}
				if(num1-num2>0) {
					return 1;
				}
				
				return 0;
			}
		});
		StringBuilder sb = new StringBuilder();
		for(String val : list) {
			sb.append(val+"\n");
		}
		System.out.println(sb.toString());
	}
}

 

 

import java.util.*;
import java.io.*;

public class Main {

	public static void main(String[] args) throws IOException {
		// Scanner sc = new Scanner(System.in);
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int n = Integer.parseInt(br.readLine());

		List<int[]> arr = new ArrayList<>();

		for (int i = 0; i < n; i++) {
			String line = br.readLine();
			int[] val = {Integer.parseInt(line.split(" ")[0]), 
            Integer.parseInt(line.split(" ")[1])};
			arr.add(val);
		}

		Collections.sort(arr, new Comparator<int[]>() { 

			@Override
			public int compare(int[] o1, int[] o2) {

				if (o1[0] == o2[0])
					return Integer.compare(o1[1], o2[1]);

				return Integer.compare(o1[0], o2[0]);
			}
		});

		for(int[] a : arr) {
			System.out.println(a[0]+" "+a[1]);
		}

	}

}

 

처음에는 List<String>을 생각하고 풀었는데 시간내에 통과가 되었다. 하지만 List<int[]>을 사용하는 것이 좀 더 메모리에 효율적이다.

 

정렬 부분에서 새로운 class에 Comparator를 implement를 할 필요 없이 바로 Collection.sort() 내부의 메소드에서 정렬이 가능하다. 

반응형

'Algorithm' 카테고리의 다른 글

백준 11720 / 숫자의 합  (0) 2020.07.09
백준 10989 / 수 정렬하기 3  (0) 2020.07.09
백준 11652 / 카드  (0) 2020.07.09
백준 10814 / 나이순 정렬  (0) 2020.07.09
StringTokenizer vs Split  (0) 2020.07.07