ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준/JAVA] 3009번 네 번째 점 - 기하학, 구현
    ETC/Algorithm 2023. 5. 30. 21:55

    문제

    내용

    세 점이 주어지고, 축에 평행한 직사각형을 만들기 위해 필요한 네 번째 점을 찾는 문제이다.

    풀이

    축에 평행하다는 X축 Y축 각각 2개의 동일한 값의 점이 있기 때문에 평행한 축이 생성된다는 의미이다.
    간단히 각각 X,Y축 좌표 중에서 1번만 정의된 값이 네 번째 점이다.

    코드

    코드 설명

    비트 마스킹을 사용한 방법과, 카운팅 정렬을 사용한 방법 2가지가 있다.

    제출 코드 (비트 마스킹)

    import java.io.*;
    import java.util.*;
    
    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));
    
            int x = 0, y = 0;
            // 비트 마스킹 방법 ^ (XOR) 연산을 사용 저장된 값과 다르면 참, 같으면 거짓
            for (int i = 0; i < 3; i++) {
                StringTokenizer st = new StringTokenizer(br.readLine(), " ");
                x = x ^ Integer.parseInt(st.nextToken());
                y = y ^ Integer.parseInt(st.nextToken());
            }
            bw.write(x + " " + y);
            bw.flush();
        }
    }

    제출 코드 (카운팅 정렬)

    import java.io.*;
    import java.util.*;
    
    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));
    
            // 계수 정렬 알고리즘 (counting sort algorithm) 사용
            int[][] arrX = new int[1001][1];
            int[][] arrY = new int[1001][1];
    
            for (int i = 0; i < 3; i++) {
                StringTokenizer st = new StringTokenizer(br.readLine(), " ");
                int x = Integer.parseInt(st.nextToken());
                int y = Integer.parseInt(st.nextToken());
                arrX[x][0]++;
                arrY[y][0]++;
            }
            int tX = 0;
            int tY = 0;
    
            // 값을 받은 뒤 중복되지 않은 값을 출력한다.
            for (int i = 1; i < 1001; i++) {
                if (arrX[i][0] == 1) {
                    tX = i;
                }
                if (arrY[i][0] == 1) {
                    tY = i;
                }
            }
            bw.write(tX + " " + tY);
            bw.flush();
        }
    }

    댓글

Designed by black7375.