[BaekJoon] 11650 좌표 정렬하기 (java)
🔗 문제 링크
https://www.acmicpc.net/problem/11650
👨🏻💻 내가 작성한 코드 (class를 생성하여 구현)
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
class Point implements Comparable<Point>{
int x;
int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public int compareTo(Point o) {
if (this.x == o.x) {
return this.y < o.y? -1:1;
}
return this.x < o.x? -1:1;
}
}
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int x,y;
ArrayList<Point> list = new ArrayList<>();
for (int i=0; i<num; i++) {
x = sc.nextInt();
y = sc.nextInt();
list.add(new Point(x,y));
}
Collections.sort(list);
for(int i=0;i<num;i++) {
System.out.println(list.get(i).x+" "+ list.get(i).y);
}
}
}
👨🏻💻 다른 사람이 작성한 코드
package baekjoon;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
long[] xy = new long[N];
long tot = 1000000;
long check = 100000;
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
long x = Integer.parseInt(st.nextToken()) + check;
long y = Integer.parseInt(st.nextToken()) + check;
xy[i] = (x * tot + y);
}
Arrays.sort(xy);
for(int i=0; i<N; i++) {
sb.append(String.valueOf((xy[i] / tot) - check) +" " + String.valueOf((xy[i] % tot) - check)).append("\n");
}
System.out.print(sb);
}
}
📝 정리
기본적인 정렬 문제임에도 Scanner를 통해 input값을 받느냐 BufferedReader를 통해 값을 받느냐, 구현을 어떻게 하느냐에 따라서 메모리 사용량과 실행 시간에 큰 차이가 나는 것을 보고 코딩테스트 연습을 더 많이하고 다른 사람들의 코드들도 참조하며 성장해야겠다는 것을 느끼게 되었다.
이번 문제에서는 BufferReader와 StringTikenizer에 대해서 익히고 넘어가도록 하자
BufferedReader
BufferedReader/Writer는 버퍼를 이용해서 읽고 쓰는 함수이다.
기존에 사용하던 Scanner를 사용하면 입력 값이 존재할때마다 목적지로 데이터를 전송을 하게 되는데 BufferedReader는 버퍼에 값들을 저장하였다가 한번에 값을 전송하여 훨씬 효율적이다.
📌 즉, 코드의 속도도 중요한 코딩테스트에서는 Scanner보다 BufferedReader를 사용하는게 좋을 것 같습니다~
StringTikenizer
StringTokenizer 클래스는 문자열을 우리가 지정한 구분자로 문자열을 쪼개주는 클래스이다.
String nextToken()메서드는 다음 token을 반환한다.
Author And Source
이 문제에 관하여([BaekJoon] 11650 좌표 정렬하기 (java)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@seongwon97/BaekJoon-11650-좌표-정렬하기-java저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)