-
[백준/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(); } }