BOJ_3009 네 번째 점
- TOC {:toc}
이 글은 백준 온라인 저지의 3009번 문제를 파이썬(Python)으로 풀이한 것을 모아놓은 글입니다.
일종의 연습 기록이며 제가 정답을 받은 코드와 참고할만한 다른 코드를 같이 기록합니다. 필요한 경우 코드에 대한 해설을 기록합니다만 코드는 통과했어도 해설은 틀릴 수 있기 때문에 가볍게 참고해주시길 부탁드립니다. 피드백은 편하신 방법으로 자유롭게 주시면 감사하겠습니다.
2021.03.26
메모리 | 시간 | 코드 길이 |
---|---|---|
28776 KB | 64 ms | 181 B |
a = []
b = []
for _ in range(3):
x, y = map(int, input().split())
a.append(x)
b.append(y)
a.sort()
b.sort()
print(a[(a.count(a[0]) - 1) * 2], b[(b.count(b[0]) - 1) * 2])
# a[0]과 a[1]를 비교하는 방법
print(a[0] if a[0] != a[1] else a[2], b[0] if b[0] != b[1] else b[2])
아이디어 & 풀이
a, b에 각각 세 개의 수를 입력받았을 때 그 값이 다른 하나의 수를 출력하는 게 목표이다.
이를 위해, 모든 좌표를 리스트에 받아서 정렬한 뒤
a[0]
의 개수를 조사해 1개면 인덱스가0
, 2개면 인덱스가2
가 되도록 했다.- 즉,
a[0]
의 개수가 1개면a[0]
이, 두 개면a[2]
가 출력된다. - 리스트의 첫 번째 원소와 두 번째 원소를 비교해서 같으면
a[0]
이, 다르면a[2]
가 출력되도록 할 수도 있다.
참고 답안 1
x = y = 0
# exec()를 이용해 아래의 statement를 3회 시행한다.
# a, b = map(int, input().split()) : 숫자를 입력받은 뒤
# x ^= a : x = x ^ a
# y ^= b : y = y ^ b
# 입력받은 세 수를 모두 XOR 연산한 결과는 값이 다른 하나의 수이다.
exec("a, b = map(int, input().split()); x ^= a; y ^= b" * 3)
print(x, y)
아이디어 & 풀이
exec()
함수를 이용해 실행을 3회 반복한다.
- [Python] eval() 함수와 exec() 함수 by 천천히 알아가는 세상
- exec() by Python Documentation
하나의 값을 추리는 데는 비트 간 배타적 논리합(XOR) 연산을 이용한다.
- XOR 연산은 교환법칙과 결합법칙이 성립하고, 항등원과 각 원소에 대한 유일한 역원이 존재한다.
a, a, b
가 입력될 때 순서에 상관없이 세 값을 XOR 연산하면b
이다.a ^ a = 0
0 ^ b = b
- 배타적 논리합 by 위키백과
- XOR 교체 알고리즘 by 위키백과
참고 답안 2
x = []
y = []
for i in range(3):
a, b = map(int, input().split())
# 입력받은 값이 x 안에 존재하면
if a in x:
# 그 값을 제거
x.remove(a)
# 존재하지 않으면
else:
# 그 값을 추가
x.append(a)
# y에서도 똑같이 실행
if b in y:
y.remove(b)
else:
y.append(b)
# 값이 같은 두 수와 다른 하나의 수가 들어오기 때문에
# 위의 반복문을 실행하면 값이 다른 하나의 수만 남는다.
print(*x, *y)
-
ps-python