백준 3009 네 번째 점[JAVA]

Ga0·2023년 3월 26일
0

baekjoon

목록 보기
8/123

  • 오늘 포스트할 문제는 3009번 네번째 점이라는 문제이다.
  • 어려운 문제는 아니지만, 하루에 한 포스트를 목표를 하고 있어서 이 문제를 포스트를 하려고 한다.

문제 해석

  1. 콘솔로 부터 직사각형의 세 좌표(x, y)를 입력받는다.
  2. 직사각형은 점이 4개이니까, 세 좌표(=점)을 받은 것을 토대로 나머지 네번째 점의 좌표(x, y)를 알아내면 되는 문제이다.

코드(정답)

import java.io.*;
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 token;

        int x_axis[] = new int[3]; //x 좌표 3개 입력받아서 저장할 배열
        int y_axis[] = new int[3]; //y 좌표 3개 입력받아서 저장할 배열
        
        for(int i = 0; i < 3; i++) { //3좌표 값만 받으니까 반복문 3번
            token = new StringTokenizer(br.readLine());
            //한줄씩 입력받아서 공백을 기준으로
            x_axis[i] = Integer.parseInt(token.nextToken()); //앞은 x좌표
            y_axis[i] = Integer.parseInt(token.nextToken()); //뒤는 y좌표
        }
        
        br.close(); //더이상 입력받을 값 없음

        int x = 0; //찾아야할 x좌표 값을 저장하는 변수
        int y = 0; //찾아야할 y좌표 값을 저장하는 변수

        if(x_axis[0] == x_axis[1]){ //만약 x 0인덱스와 1인덱스가 같다면 2개 있다는 뜻임으로
            x = x_axis[2]; //0과 1인덱스가 아닌 2인덱스를 저장
        }else{ //0과 1인덱스의 x값이 다른데,
            //만약, x의 0인덱스와 2인덱스가 같으면 1인덱스 저장 그게 아니라면 0인덱스를 저장
            x = (x_axis[0] == x_axis[2]) ? (x_axis[1]) : (x_axis[0]);
        }
        
        //y도 x와 마찬가지
        if(y_axis[0] == y_axis[1]){
            y = y_axis[2];
        }else{
            y = (y_axis[0] == y_axis[2]) ? (y_axis[1]) : (y_axis[0]);
        }

        bw.write(x + " " + y);
        bw.flush();
        bw.close();
    }
}

결과(1)

  • 코드의 설명은 주석으로 작성해놓았다.

  • 좌표 값을 찾는 로직을 간단하게 풀어보자면, 3개의 좌표 값을 저장한 x_axis, y_axis 배열에서 같은 값이 없는 x좌표와 y좌표를 각각 구하면 되는 문제이다.

  • 근데 y와 x를 찾는 if문이 로직이 공통되므로 함수를 빼보았다.

함수로 뺀 코드(정답)

import java.io.*;
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 token;

        int x_axis[] = new int[3]; //x 좌표 3개 입력받아서 저장할 배열
        int y_axis[] = new int[3]; //y 좌표 3개 입력받아서 저장할 배열
        
        for(int i = 0; i < 3; i++) { //3좌표 값만 받으니까 반복문 3번
            token = new StringTokenizer(br.readLine());
            //한줄씩 입력받아서 공백을 기준으로
            x_axis[i] = Integer.parseInt(token.nextToken()); //앞은 x좌표
            y_axis[i] = Integer.parseInt(token.nextToken()); //뒤는 y좌표
        }
        
        br.close(); //더이상 입력받을 값 없음

        bw.write(findAxis(x_axis) + " " + findAxis(y_axis));
        bw.flush();
        bw.close();
    }
    //각각(x와 y)의 좌표값을 찾아주는 메서드
    static int findAxis(int[] array){
        if(array[0] == array[1]){ //만약 x 0인덱스와 1인덱스가 같다면 2개 있다는 뜻임으로
            return array[2]; //0과 1인덱스가 아닌 2인덱스를 저장
        }else{ //0과 1인덱스의 x값이 다른데,
            //만약, x의 0인덱스와 2인덱스가 같으면 1인덱스 저장 그게 아니라면 0인덱스를 저장
            return (array[0] == array[2]) ? (array[1]) : (array[0]);
        }
    }
}

결과(2)

  • 함수로 빼도 안빼도 시간은 똑같다.
  • 하지만, 코드 길이가 차이가 나기도하고 가독성 부분에서도 함수로 빼는 것이 더 나은 것 같다!

느낀점

  • 요즘 팀프로젝트에 계속 정신이 팔려있어서 내 자신이 백준을 점점 소홀히 하는 느낌이 든다...
  • 그래도 목표로 했던, 1일 1포스트와 적어도 하루에 1문제이상은 풀자라고 했던 것은 꼭 지키도록 노력해야겠답... 파이팅...!

0개의 댓글