Algorithm
[프로그래머스 / 데모테스트] 나머지 한 점 (Java)
haehyun
2021. 11. 4. 23:17
728x90
문제
https://programmers.co.kr/learn/courses/18/lessons/1878?language=java
알고리즘 문제 해설 - 나머지 한 점
프로그래머스의 모의테스트는 프로그래머스의 시스템에 익숙해지기 위한 테스트이며, 문제 자체는 2018 1ST KAKAO BLIND RECRUITMENT와 전혀 관계없습니다. 다만 모의테스트의 풀이에 대한 요청이 있어
programmers.co.kr
- 직사각형을 만들기 위한 4개의 점 중 3개의 좌표가 주어졌을 때 남은 하나의 좌표를 구하라.
- 직사각형은 [x1, y1] [x1, y2] [x2, y1] [x2, y2] 4개의 좌표로 구성된다는 것에 포커스
if~else문을 사용한 방법
public int[] solution(int[][] v) {
int[] answer = new int[2]; //직사각형을 만들기 위해 남은 점의 x,y 좌표
//좌표 값이 같은 것을 제외하고 혼자 남는 좌표값 구하기
for(int i=0; i < answer.length; i++){
if(v[0][i] == v[1][i]){
answer[i] = v[2][i];
}else if(v[0][i] == v[2][i]){
answer[i] = v[1][i];
}else{
answer[i] = v[0][i];
}
}
return answer;
}
- 각 점의 x, y좌표 별로 2개씩 쌍을 이루지 못하고 혼자 남는 값을 구하는 식으로, 남은 한 점의 좌표를 구한다.
- 입력값은 무조건 3개의 점 좌표이기 때문에 3개의 요소 값 중 2개가 같은지 차례로 비교.
비트연산자 XOR을 사용한 방법
class Solution {
public int[] solution(int[][] v) {
int[] answer = new int[2];
answer[0] = v[0][0] ^ v[1][0] ^ v[2][0];
answer[1] = v[0][1] ^ v[1][1] ^ v[2][1];
return answer;
}
}
비트연산자 XOR
두 수가 같으면 0, 다르면 1을 반환.
A | B | A ^ B |
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
- 두 정수 A, B 값이 같을 경우 이진수 비트값도 같다. 그 말은 즉슨, 값이 같은 정수를 XOR하면 같은 위치에 있는 비트가 무조건 똑같기 때문에 '두 수가 같으면 0' 이라는 조건에 의해 모든 비트가 0이 된다.
- 또한 하나의 정수 A에 정수 B를 XOR한 뒤, 그 결과값에 다시 같은 정수 B를 XOR하게 되면 처음 값 A가 나온다.
728x90