반응형
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
1 초 | 128 MB | 11475 | 8287 | 7581 | 74.127% |
문제
세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.
입력
세 점의 좌표가 한 줄에 하나씩 주어진다. 좌표는 1보다 크거나 같고, 1000보다 작거나 같은 정수이다.
출력
직사각형의 네 번째 점의 좌표를 출력한다.
예제 입력 1
30 20
10 10
10 20
예제 출력 1
30 10
이 문제는 별로 어렵지가 않다. 첫 번째 입력을 보면 30, 10, 10 이 입력되고, 네 번째 점의 좌표는 30이 되면 되는것이다.
내가 생각해낸 방법은 배열을 두개를 만들어서 해당 인덱스의 값을 증가 시킨 후, 마지막에 배열의 값을 검사해서 값이 2가 아닌 1인 값만 출력 시키면 된다.
나의 풀이
public class Main {
static int[] xrr = new int[1001];
static int[] yrr = new int[1001];
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
for (int i = 0; i <= 2; i++) {
st = new StringTokenizer(bf.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
xrr[x]++;
yrr[y]++;
}
for (int i = 1; i < xrr.length; i++) {
if (xrr[i] == 1) {
bw.write(i + " ");
break;
}
}
for (int i = 1; i < yrr.length; i++) {
if (yrr[i] == 1) {
bw.write(i +"");
break;
}
}
bw.flush();
bw.close();
}
}
다른 사람의 풀이
다른 사람의 풀이를 보다가 XOR 연산을 이용해서 풀이한 것을 봤다. XOR연산으로 비교해서 마지막 결과를 출력시키는 것인데 대박이다.
XOR 연산은 ?
X Y XOR
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int a = 0;
int b = 0;
for (int i = 0; i <= 2; i++) {
st = new StringTokenizer(bf.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
a ^= x;
b ^= y;
}
bw.write(a + " " + b);
bw.flush();
bw.close();
}
}
반응형