kakao 코딩 테스트 데모로 나온 문제이다. 예전에도 풀어봤었는데 이번엔 파이썬으로 풀어보았다.
문제 : 좌표위 세점이 주어지면 직사각형을 이루기 위한 나머지 한점의 좌표를 찾는 문제이다. 각 변은 x, y 축과 평행하다.
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 연산)
물론 세점밖에 없기때문에 블로그 마지막 처럼 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 |