직사각형 좌표 구하기
직사각형을 만들기 위한 4개의 점 중 3개의 좌표가 주어질 때, 나머지 한 점의 좌표를 구하는 문제이다.
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
입출력 예
v | result |
[[1,4],[3,4],[3,10]] | [1,10] |
[[1,1],[2,2],[1,2]] | [2,1] |
풀이
위와 같이 2차원 배열의 3개의 값을 이용해 나머지 한 점을 구하면 된다.
직사각형을 만들기 위해선 직선이 필요하다. x와 y의 좌표 값은 두 개씩 중복된다.
[[1,4],[3,4],[3,10]] 을 보면 x값 3이 2개이고 y값 4가 2개이다.
그렇다면 하나씩 남은 1과 10을 이용해서 답을 구할 수 있다. [1,10]
- 서로 중복된 값을 피하면 원하는 나머지 x, y 좌표값을 구할 수 있다.
- 각 x, y축에 중복된 수 이외의 값을 넣으면 된다.
TIP
문제의 규칙만 찾으면 쉽게 풀 수 있는 문제
import java.util.Arrays;
public class Solution3 {
public int[] solution(int[][] v) {
int[] answer = new int[2];
// i=0 x좌표 , i=1 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 if (v[1][i] == v[2][i]) {
answer[i] = v[0][i];
}
}
return answer;
}
public static void main(String[] args) {
Solution sol = new Solution();
int[][] v = {{1,4},{3,4},{3,10}};
int[] answer = sol.solution(v);
System.out.println(Arrays.toString(answer));
}
}
논리연산자 XOR(^)을 사용하는 방법이다.
XOR 연산자는 서로 값이 다를 때 참을 반환하고, 값이 같다면 거짓을 반환한다.
- 교환법칙 :
- a^b = b^a
- a^b^c = c^b^a
- a^a = 0
- a^0 = a
import java.util.Arrays;
public class Solution3 {
public int[] solution(int[][] v) {
int[] answer = new int[2];
// i=0 x좌표 , i=1 y좌표
//비트 연산자로 풀기
answer[0] = v[0][0]^v[1][0]^v[2][0];
answer[1] = v[0][1]^v[1][1]^v[2][1];
return answer;
}
public static void main(String[] args) {
Solution sol = new Solution();
int[][] v = {{1,4},{3,4},{3,10}};
int[] answer = sol.solution(v);
System.out.println(Arrays.toString(answer));
}
}
참고 :
'알고리즘 , 문제해결 > 문제' 카테고리의 다른 글
[Programmers] 정수 배열 리턴 (0) | 2023.03.18 |
---|---|
[Programmers] 직삼각형 출력하기 (0) | 2023.03.18 |