본문 바로가기
알고리즘

[python]직사각형 한점 찾기

by ujin2021 2020. 8. 25.

kakao 코딩 테스트 데모로 나온 문제이다. 예전에도 풀어봤었는데 이번엔 파이썬으로 풀어보았다.

 

문제 : 좌표위 세점이 주어지면 직사각형을 이루기 위한 나머지 한점의 좌표를 찾는 문제이다. 각 변은 x, y 축과 평행하다.

1. 내코드

x, y축과 평행하다는 조건때문에 문제가 쉬워졌다. 세점의 x, y 점을 각각 비교해서 서로 다른 한점을 붙이면 그게 바로 직사각형을 이루는 좌표이기 때문이다.

먼저 x, y좌표 각각을 리스트로 만들고 싶어서 람다 함수를 사용하여 x, y점들을 뽑아냈다. 그이후에 정렬을 했다.

만약에 정렬한 결과가 x = [1, 3, 3], y = [4, 4, 10] 이렇다면 정답은 [1, 10] 가 될것이다. 어차피 세점이라는 것을 알기때문에 인덱스가 0과 1 인것을 비교하여 다른 수를 가진 인덱스를 뽑아냈다.

쉬운 문제이지만 코드가 길어진다는게 마음에 들지 않았다.

 

2. 다른사람 풀이

구글링을 해보니 여러 코드들이 나왔는데, 거기서 비트 연산을 사용하여 푼 코드를 보았다. 내코드에서 if문 대신 

answer.append(x[0]^x[1]^x[2])
answer.append(y[0]^y[1]^y[2])

이렇게만 해줘도 다른 숫자를 찾아낼 수 있다. (^는 XOR 연산)

참고블로그

 

[카카오 코딩테스트]3. 직사각형 좌표 구하기

카카오에서 블라인드 채용을 위해 모의테스트를 제공한다.이를 solved 하면서 알고리즘 능력 향상 및 테스...

blog.naver.com

물론 세점밖에 없기때문에 블로그 마지막 처럼 v[0][0]^v[1][0]^v[2][0] 이런식으로 딱 두줄만 나오도록 짤 수 있다.

비트 연산은 생각지도 못했는데 아직 배울게 많다고 느꼈다. 

'알고리즘' 카테고리의 다른 글

[python]programmers-같은숫자는 싫어  (0) 2020.08.27
[python]programmers-2016년  (0) 2020.08.27
[python]programmers -K번째수  (0) 2020.08.25
java/python 진수변환  (0) 2020.07.31
python 입력받기  (0) 2020.07.29