일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Android
- androidstudio
- bitmap
- BOJ
- Canvas
- CS
- Database
- DBeaver
- DP
- Ecilpse
- Eclipse
- firebase
- git
- github
- GooglePlayServices
- gradle
- IDE
- IntelliJ
- java
- json
- kotlin
- level2
- linux
- mariadb
- MYSQL
- Paint
- permission
- python
- Sorting
- sourcetree
Archives
will come true
[프로그래머스 / 데모테스트] 나머지 한 점 (Java) 본문
728x90
문제
https://programmers.co.kr/learn/courses/18/lessons/1878?language=java
- 직사각형을 만들기 위한 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
'Algorithm' 카테고리의 다른 글
[프로그래머스 / Level1] 소수 만들기 (Java) (0) | 2021.11.05 |
---|---|
[프로그래머스 / Level1] 폰켓몬 (Java) (0) | 2021.11.05 |
[프로그래머스 / Level1] 두 개 뽑아서 더하기 (Java) (0) | 2021.11.04 |
[프로그래머스 / Level1] 비밀지도 (Java) (0) | 2021.11.01 |
[프로그래머스 / Level1] 부족한 금액 계산하기 (Java) (0) | 2021.11.01 |
Comments