will come true

[프로그래머스 / 데모테스트] 나머지 한 점 (Java) 본문

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

위 코드에서 일어나는 XOR 연산 과정

  • 두 정수 A, B 값이 같을 경우 이진수 비트값도 같다. 그 말은 즉슨, 값이 같은 정수를 XOR하면 같은 위치에 있는 비트가 무조건 똑같기 때문에 '두 수가 같으면 0' 이라는 조건에 의해 모든 비트가 0이 된다.
  • 또한 하나의 정수 A에 정수 B를 XOR한 뒤, 그 결과값에 다시 같은 정수 B를 XOR하게 되면 처음 값 A가 나온다.
728x90
Comments