코테/백준
3009번 네 번째 점
jhss9747
2025. 2. 11. 17:19
문제
세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.
입력
세 점의 좌표가 한 줄에 하나씩 주어진다. 좌표는 1보다 크거나 같고, 1000보다 작거나 같은 정수이다.
출력
직사각형의 네 번째 점의 좌표를 출력한다.
풀이
문제에서 주어진 좌표를 자세히 보면 직사각형이기에 서로 두번씩 반복됨을 알수있다.
예제
30 20
10 10
10 20
출력
30 10
그러니깐 단순하게 생각하면 x좌표와 y좌표에서 각각 1번씩만 나온 숫자를 출력하면 된다.
결국 중복을 어떻게 처리하는지 구현하는 문제이다.
- 단순하게 풀이
더보기
- 모든 값을 따로 입력받는다.
- 1번째 x의 값과 2번째 x의 값을 비교해서 서로 다르고
- 1번째 x의 값과 3번째 x의 값이 같다면 1번째 값 저장
- 2번째 x의 값과 3번째 x의 값이 같다면 2번재 값 저장
- y도 동일하게 진행
- 저장된 값을 형식에 맞춰 출력
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
int d = sc.nextInt();
int ra = sc.nextInt();
int rb = sc.nextInt();
if (a != c){
if (a == ra) ra = c;
else if (c == ra) ra = a;
}
if (b != d){
if (b == rb) rb = d;
else if (d == rb) rb = b;
}
System.out.printf("%d %d", ra, rb);
}
}
이번 문제는 입력받을 수의 숫자가 정해져있어서 굳이 반복문을 쓸 필요가 없었다.
- 해시맵을 활용하여 풀이
더보기
- 두개의 해시맵을 생성
- 반복문으로 3번씩 반복한다.
- a가 mapa의 키와 같다면 값 증가
- 아니면 새로 추가
- 이 작업을 b에서도 동일하게 진행
- 맵을 반복하여 값이 1인 키를 찾아 형식에 맞춰 출력
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
HashMap<Integer, Integer> mapa = new HashMap<>();
HashMap<Integer, Integer> mapab = new HashMap<>();
Scanner sc = new Scanner(System.in);
int a ,b;
for (int i = 0; i < 3; i++) {
a = sc.nextInt();
b = sc.nextInt();
if(mapa.containsKey(a)) mapa.put(a, mapa.get(a) + 1);
else mapa.put(a, 1);
if(mapab.containsKey(b)) mapab.put(b, mapab.get(b) + 1);
else mapab.put(b, 1);
}
for (Map.Entry<Integer, Integer> entry : mapa.entrySet()) {
if(entry.getValue() == 1) System.out.print(entry.getKey() + " ");
}
for (Map.Entry<Integer, Integer> entry : mapab.entrySet()) {
if(entry.getValue() == 1) System.out.print(entry.getKey());
}
}
}
제일 처음 생각한 방법이지만 제일 느리고 복잡한 방법이였다.
이전에 중복을 찾을때 해시맵을 사용한 기억이 있어서 이를 활용해보았었지만
이 문제에는 그닥 좋은 방법은 아닌 것 같다.