Exam/코딩테스트

[프로그래머스] 직사각형 좌표 구하기, 나머지 한 점(cpp/python)

며용 2021. 5. 29. 23:31

https://programmers.co.kr/learn/courses/18/lessons/1878?language=cpp 

 

알고리즘 문제 해설 - 나머지 한 점

프로그래머스의 모의테스트는 프로그래머스의 시스템에 익숙해지기 위한 테스트이며, 문제 자체는 2018 1ST KAKAO BLIND RECRUITMENT와 전혀 관계없습니다. 다만 모의테스트의 풀이에 대한 요청이 있어

programmers.co.kr

 

 

문제

 

 

3점이 주어지면 직사각형을 만들 수 있는 한 점을 구하는 문제다

 

 

 

풀이

 

x좌표, y좌표 각각 한 번씩만 나온 점을 가져와주면 된다.

 

나왔는지 안나왔는지를 반복문과 조건문을 써서 찾아도 되지만 XOR을 이용하면 더 간단하게 풀 수 있다.

 

XOR는 보통 같은 값이면 0, 다르면 1이라고 하는데

1이 홀수개가 있으면 1이 나온다

 

 

 

 

코드

  • C++
vector<int> solution(vector<vector<int> > v) {
    vector<int> ans;

    ans.push_back(v[0][0]^v[1][0]^v[2][0]);
    ans.push_back(v[0][1]^v[1][1]^v[2][1]);
    
    return ans;
}

 

  • Python

  XOR

def solution(v):
    answer = []

    answer.append(v[0][0]^v[1][0]^v[2][0])
    answer.append(v[0][1]^v[1][1]^v[2][1])

    return answer

 

  collections

import collections

def solution(v):
    answer = []

    for i in zip(*v):
        count = collections.Counter(i)
        answer.extend([j for j in count if count[j] == 1])

    return answer

 

 

zip(*(asterisk))로 2차원 배열을 풀어서 x, y를 나눠서 반복문을 돌게 하고

collections에 있는 Counter를 사용해서 개수를 센다

1개만 있는 숫자를 extend해준다