백준 11651 좌표 정렬하기2 [JAVA]

Ga0·2023년 4월 27일
0

baekjoon

목록 보기
39/125

문제 해석

  • 이 문제는 전 11650번 좌표정렬하기POST와 거의 똑같은 문제이다.
  • 전 POST에서는 x를 기준으로 정렬하였다면, 이번 POST 11651문제에선 y를 기준으로 작은수 -> 큰수 정렬하고, 만약 y값이 같다면 x를 비교하여 x가 작은 수 -> 큰 수가 되도록 정렬한다.

코드1


import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.StringTokenizer;


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));
        StringTokenizer st ;

        int N = Integer.parseInt(br.readLine());
        int[][] arrays = new int[N][2];

        for(int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            arrays[i][0] = Integer.parseInt(st.nextToken());
            arrays[i][1] = Integer.parseInt(st.nextToken());
        }
        br.close();

        Arrays.sort(arrays, (num1, num2) -> { 
        	//y가 1인덱스 요소이므로 같다면, x(0번째 인덱스 비교) 다르다면 y를 비교한다.
            return num1[1]!=num2[1] ? num1[1]-num2[1] : num1[0]-num2[0];
        });

        for(int i = 0; i < N; i++){
            bw.write(arrays[i][0] + " " + arrays[i][1] +"\n");
        }

        bw.flush();
        bw.close();


    }
}

결과1

코드2

import javafx.scene.layout.CornerRadii;

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.StringTokenizer;


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));
        StringTokenizer st ;

        ArrayList<Coordinate> coorList = new ArrayList<Coordinate>(); //Coordinate클래스를 담은 리스트(Coordinate객체 여러개)

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

        for(int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            coorList.add(new Coordinate(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken())));
        }
        br.close();

        Collections.sort(coorList); //sort를 하면 Comparable을 구현한 Coordinate의 compareTo()을 실행한다.

        for(int i = 0; i < N; i++){
            bw.write(coorList.get(i).toString());
        }

        bw.flush();
        bw.close();
    }
}

class Coordinate implements Comparable<Coordinate>{
    int x ; //x 좌표
    int y; //y 좌표

    public Coordinate(int x, int y) {
        this.x = x;
        this.y = y;
    }

    @Override
    public int compareTo(Coordinate o) { //비교 부분 => 자기 자신의 x, y와 자신이 아닌 Coordinater객체 x, y를 비교
        if (this.y != o.y) return this.y - o.y; //y가 서로 다르면 자신의 y에 매개변수로 받은 객체의 y를 뺀다(양수가 나오면 자리를 바꾼다)
        else return this.x - o.x; //y가 서로 같으면 x를 비교하는데 자신의 x와 매개변수로 받은 객체의 x를 뺀다(양수가 나오면 자리를 바꾼다)
    }

    public String toString() {
        return x + " " + y + "\n"; //한줄 씩 츨력형식
    }
}

결과2

느낀점

  • 시간이 많이 소요되어서 다른 분의 맞힌코드부분을 봤는데, 입력받는 함수와, 비교하는 클래스를 직접 구현하여 처리하는 것 같았다.그래서, 그 방법을 사용해서 코드를 작성해 봤는데 확실히 시간이 줄긴 줄었다..
  • Collentions.sort()이 익숙하지 않아서 생각하지 못한 방법이었다.

0개의 댓글