Notice
Recent Posts
Recent Comments
Link
개발자는 기록이 답이다
[프로그래머스][Java][모의테스트] 나머지 한 점 본문
https://school.programmers.co.kr/learn/courses/18/lessons/1878
문제 설명
직사각형을 만드는 데 필요한 4개의 점 중 3개의 좌표가 주어질 때, 나머지 한 점의 좌표를 구하려고 합니다. 점 3개의 좌표가 들어있는 배열 v가 매개변수로 주어질 때, 직사각형을 만드는 데 필요한 나머지 한 점의 좌표를 return 하도록 solution 함수를 완성해주세요. 단, 직사각형의 각 변은 x축, y축에 평행하며, 반드시 직사각형을 만들 수 있는 경우만 입력으로 주어집니다.
제한사항
- v는 세 점의 좌표가 들어있는 2차원 배열입니다.
- v의 각 원소는 점의 좌표를 나타내며, 좌표는 [x축 좌표, y축 좌표] 순으로 주어집니다.
- 좌표값은 1 이상 10억 이하의 자연수입니다.
- 직사각형을 만드는 데 필요한 나머지 한 점의 좌표를 [x축 좌표, y축 좌표] 순으로 담아 return 해주세요.
입출력 예
v | result |
[[1,4],[3,4],[3,10]] | [1,10] |
[[1,1],[2,2],[1,2]] | [2,1] |
내가 푼 풀이
좌표문제는 항상 겁부터 먹기 시작해서 그런걸까
제출하니까 성공이긴 한데, 입력이 정해져 있는데 왜 이렇게 어렵게 풀었는지 모르겠다..
어차피 x좌표 3개 중에 쌍으로 같은 좌표를 갖고 있다. 그래서 동일하지 않은 1개 좌표가 출력되고,y좌표도 마찬가지인데...
import java.util.*;
class Solution {
public int[] solution(int[][] v) {
int[] answer = new int[2];
ArrayList<Integer> x = new ArrayList<>();
ArrayList<Integer> y = new ArrayList<>();
for (int i = 0; i < v.length; i++) {
x.add(v[i][0]);
}
for (int i = 0; i < v.length; i++) {
y.add(v[i][1]);
}
Collections.sort(x);
Collections.sort(y);
for (int i = 0; i < x.size()-1; i++) {
if (x.get(i).equals(x.get(i+1)) && i == 1) answer[0] = x.get(0);
else if (x.get(i).equals(x.get(i+1)) && i != 1) answer[0] = x.get(2);
}
for (int i = 0; i < y.size()-1; i++) {
if (y.get(i).equals(y.get(i + 1)) && i == 1) answer[1] = y.get(0);
else if (y.get(i).equals(y.get(i+1)) && i != 1) answer[1] = y.get(2);
}
return answer;
}
}
테스트 1 〉 | 통과 (0.22ms, 78.6MB) |
테스트 2 〉 | 통과 (0.21ms, 83MB) |
테스트 3 〉 | 통과 (0.23ms, 73MB) |
테스트 4 〉 | 통과 (0.19ms, 73.2MB) |
테스트 5 〉 | 통과 (0.22ms, 75.9MB) |
테스트 6 〉 | 통과 (0.21ms, 76.5MB) |
테스트 7 〉 | 통과 (0.21ms, 77.3MB) |
테스트 8 〉 | 통과 (0.21ms, 80.1MB) |
테스트 9 〉 | 통과 (0.23ms, 71.9MB) |
테스트 10 〉 | 통과 (0.22ms, 75.9MB) |
테스트 11 〉 | 통과 (0.20ms, 77.4MB) |
테스트 12 〉 | 통과 (0.23ms, 73MB) |
테스트 13 〉 | 통과 (0.32ms, 72.4MB) |
테스트 14 〉 | 통과 (0.21ms, 72.4MB) |
테스트 15 〉 | 통과 (0.20ms, 73.8MB) |
테스트 16 〉 | 통과 (0.32ms, 77.1MB) |
테스트 17 〉 | 통과 (0.21ms, 76.6MB) |
테스트 18 〉 | 통과 (0.20ms, 70.6MB) |
테스트 19 〉 | 통과 (0.29ms, 70.7MB) |
테스트 20 〉 | 통과 (0.37ms, 79.8MB) |
테스트 21 〉 | 통과 (0.27ms, 73.5MB) |
테스트 22 〉 | 통과 (0.27ms, 73.3MB) |
테스트 23 〉 | 통과 (0.27ms, 77.4MB) |
다른 풀이 1
class Solution {
public int[] solution(int[][] v) {
int x;
int y;
if(v[0][0]==v[2][0]){
x=v[1][0];
}else if(v[1][0]==v[2][0]){
x=v[0][0];
}else{
x=v[2][0];
}
if(v[0][1]==v[1][1]){
y=v[2][1];
}else if(v[1][1]==v[2][1]){
y=v[0][1];
}else{
y=v[1][1];
}
int[] answer = {x,y};
return answer;
}
}
테스트 1 〉 | 통과 (0.02ms, 73.1MB) |
테스트 2 〉 | 통과 (0.02ms, 77MB) |
테스트 3 〉 | 통과 (0.01ms, 75MB) |
테스트 4 〉 | 통과 (0.01ms, 69.2MB) |
테스트 5 〉 | 통과 (0.01ms, 79.5MB) |
테스트 6 〉 | 통과 (0.02ms, 78.4MB) |
테스트 7 〉 | 통과 (0.01ms, 70.9MB) |
테스트 8 〉 | 통과 (0.01ms, 77.5MB) |
테스트 9 〉 | 통과 (0.01ms, 78.6MB) |
테스트 10 〉 | 통과 (0.02ms, 74.8MB) |
테스트 11 〉 | 통과 (0.02ms, 75.5MB) |
테스트 12 〉 | 통과 (0.01ms, 77.6MB) |
테스트 13 〉 | 통과 (0.02ms, 73.8MB) |
테스트 14 〉 | 통과 (0.01ms, 76.6MB) |
테스트 15 〉 | 통과 (0.03ms, 77.3MB) |
테스트 16 〉 | 통과 (0.01ms, 72.7MB) |
테스트 17 〉 | 통과 (0.01ms, 71.8MB) |
테스트 18 〉 | 통과 (0.02ms, 75.2MB) |
테스트 19 〉 | 통과 (0.01ms, 75.9MB) |
테스트 20 〉 | 통과 (0.03ms, 79MB) |
테스트 21 〉 | 통과 (0.02ms, 77MB) |
테스트 22 〉 | 통과 (0.01ms, 78.4MB) |
테스트 23 〉 | 통과 (0.02ms, 83.5MB) |
다른 풀이 2 해설 포함 - XOR연산자 활용
XOR(Exclusive OR)은 논리 연산자 중 하나로, 두 개의 논리 값(참 또는 거짓)을 입력으로 받아서 다음과 같은 규칙에 따라 결과를 계산합니다:
두 입력 값이 서로 다르면 XOR의 결과는 참(true)입니다.
두 입력 값이 같으면 XOR의 결과는 거짓(false)입니다.
자바에서 XOR 연산은 ^ 기호를 사용하여 수행됩니다.
- A xor A = 0
- A xor A xor B = B
- 같은 값 2개와 다른값 하나를 모두 XOR하면 다른 값 하나가 나온다.
- x1이 두번 나왔다면
- x1 xor x1 xor x2 = x2
- y2가 두 번 나왔다면
- y1 xor y2 xor y2 = y1
class Solution {
public int[] solution(int[][] v) {
int[] answer = new int[2];
for(int i = 0; i <3; i++) {
answer[0] ^= v[i][0];
answer[1] ^= v[i][1];
}
return answer;
}
}
테스트 1 〉 | 통과 (0.02ms, 64.3MB) |
테스트 2 〉 | 통과 (0.02ms, 77.1MB) |
테스트 3 〉 | 통과 (0.01ms, 78.7MB) |
테스트 4 〉 | 통과 (0.54ms, 66.2MB) |
테스트 5 〉 | 통과 (0.01ms, 78.4MB) |
테스트 6 〉 | 통과 (0.01ms, 79.7MB) |
테스트 7 〉 | 통과 (0.02ms, 74.5MB) |
테스트 8 〉 | 통과 (0.01ms, 74.1MB) |
테스트 9 〉 | 통과 (0.01ms, 74.6MB) |
테스트 10 〉 | 통과 (0.01ms, 67.3MB) |
테스트 11 〉 | 통과 (0.02ms, 93MB) |
테스트 12 〉 | 통과 (0.02ms, 76.7MB) |
테스트 13 〉 | 통과 (0.02ms, 74.4MB) |
테스트 14 〉 | 통과 (0.01ms, 77.6MB) |
테스트 15 〉 | 통과 (0.02ms, 76.9MB) |
테스트 16 〉 | 통과 (0.02ms, 75.4MB) |
테스트 17 〉 | 통과 (0.01ms, 75MB) |
테스트 18 〉 | 통과 (0.02ms, 69.6MB) |
테스트 19 〉 | 통과 (0.01ms, 74.3MB) |
테스트 20 〉 | 통과 (0.01ms, 75MB) |
테스트 21 〉 | 통과 (0.02ms, 76.7MB) |
테스트 22 〉 | 통과 (0.01ms, 75.3MB) |
테스트 23 〉 |
통과 (0.01ms, 69.8MB) |
다른 풀이 3 - 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;
}
}
테스트 1 〉 | 통과 (0.01ms, 73.5MB) |
테스트 2 〉 | 통과 (0.01ms, 72.8MB) |
테스트 3 〉 | 통과 (0.01ms, 78.8MB) |
테스트 4 〉 | 통과 (0.02ms, 77.6MB) |
테스트 5 〉 | 통과 (0.01ms, 73MB) |
테스트 6 〉 | 통과 (0.03ms, 70.6MB) |
테스트 7 〉 | 통과 (0.01ms, 73.6MB) |
테스트 8 〉 | 통과 (0.01ms, 74.6MB) |
테스트 9 〉 | 통과 (0.02ms, 77.8MB) |
테스트 10 〉 | 통과 (0.02ms, 83.3MB) |
테스트 11 〉 | 통과 (0.02ms, 70.2MB) |
테스트 12 〉 | 통과 (0.01ms, 76.5MB) |
테스트 13 〉 | 통과 (0.02ms, 69.8MB) |
테스트 14 〉 | 통과 (0.02ms, 80.6MB) |
테스트 15 〉 | 통과 (0.02ms, 75.2MB) |
테스트 16 〉 | 통과 (0.02ms, 74.3MB) |
테스트 17 〉 | 통과 (0.01ms, 77.9MB) |
테스트 18 〉 | 통과 (0.01ms, 76.7MB) |
테스트 19 〉 | 통과 (0.02ms, 73.1MB) |
테스트 20 〉 | 통과 (0.02ms, 77.8MB) |
테스트 21 〉 | 통과 (0.01ms, 75MB) |
테스트 22 〉 | 통과 (0.02ms, 75.1MB) |
테스트 23 〉 | 통과 (0.02ms, 86.7MB) |
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][Java][Lv.1] 완주하지 못한 선수 (0) | 2023.10.03 |
---|---|
[프로그래머스][Java][Lv.1] 포켓몬 (0) | 2023.10.03 |
[프로그래머스][Java][Lv.2] 구명보트 - 투포인터 (0) | 2023.09.29 |
[프로그래머스][Java][Lv.2] 숫자의 표현 - 투포인터 (0) | 2023.09.29 |
[프로그래머스][Java][Lv.0] 문자열 뒤집기 (0) | 2023.08.30 |