문제 출처 - Baekjoon Online Judge
문제는 여기
[문제]
세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.
[입력]
세 점의 좌표가 한 줄에 하나씩 주어진다. 좌표는 1보다 크거나 같고, 1000보다 작거나 같은 정수이다.
[출력]
직사각형의 네 번째 점의 좌표를 출력한다.
[풀이]
1. 총 3개의 좌표가 주어진다면 x의 좌표 3개 중 1번만 사용된 좌표, y의 좌표 3개 중 1번만 사용된 좌표가 4번째 좌표임을 이용해서 문제를 해결하였다.
[접근]
1. 배열에 값을 다 받아서 for문을 돌면서 1번만 사용된 값을 찾으려고 생각했다.
2. 하지만 색다르게 HashSet을 이용해서 이미 입력이 되었다면 해당 값을 제거해주고 없다면 추가하는 식으로 해결하였다.
3. 결과 출력을 할 때, 그냥 set의 toString()을 사용하면 []에 포함되어 값이 출력된다.
4. 이를 해결해주기 위해 Iterator를 사용하여 출력해주었다.
5. HashSet의 장점인 속도를 살렸다.
[코드]
package BOJ_bronze;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Iterator;
import java.util.StringTokenizer;
public class Main_B3_3009 {
static HashSet<Integer> x;
static HashSet<Integer> y;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
x = new HashSet<>(); // x의 좌표값을 담기 위한 hashset
y = new HashSet<>(); // y의 좌표값을 담기 위한 hashset
for (int i = 0; i < 3; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
// x의 값 임의변수 n1, y의 값 임의변수 n2
int n1 = Integer.parseInt(st.nextToken());
int n2 = Integer.parseInt(st.nextToken());
// 이미 있다면 제거해주고 없다면 추가
if (x.contains(n1)) {
x.remove(n1);
}
else {
x.add(n1);
}
if (y.contains(n2)) {
y.remove(n2);
}
else {
y.add(n2);
}
}
// 안에 있는 값을 출력하기 위한 Iterator
Iterator<Integer> xiter = x.iterator();
Iterator<Integer> yiter = y.iterator();
while(xiter.hasNext()) {
System.out.print(xiter.next() +" ");
}
while(yiter.hasNext()) {
System.out.println(yiter.next());
}
}
}
'문제 풀이 > Baekjoon' 카테고리의 다른 글
[백준] S2 11055번 가장 큰 증가 부분 수열 (JAVA) (0) | 2021.10.20 |
---|---|
[백준] G2 16137번 견우와 직녀 (JAVA) (0) | 2021.10.19 |
[백준] G5 14502번 연구소 (JAVA) (0) | 2021.10.15 |
[백준] G4 2096번 내려가기 (JAVA) (0) | 2021.10.14 |
[백준] G4 17144번 미세먼지 안녕! (JAVA) (0) | 2021.10.13 |