파이썬 백준 2009번
브론즈3
https://www.acmicpc.net/problem/3009
문제 보기
분류: 기하 1
문제 풀기
처음에 for 문을 돌려 풀까 하다가 나 스스로가 dictionary 사용이 부족한 것 같아 딕셔너리를 이용해 풀기로 하였다. 그런데 풀다가 보니 너무 돌아 돌아 돌아간 듯..
여튼, 기본적으로 찾고자 하는 점의 좌표는 x, y 각 세 개의 점에서 중복이 일어나지 않은 좌표의 x, y 이다. 이렇게 문제를 풀기 위해 생각한 딕셔너리 활용 방법으로, 2차원 array 로 세 점의 좌표를 저장하되 x 와 y 를 나누어 저장하고 이것을 dictionary 로 옮기면서 key 와 value 로 나누어 각각 좌표, 개수로 저장을 한다. 이렇게 저장하고 하고 나면 이제 특정 value 를 지정하여 key 값을 찾는 방법이 인터넷을 뒤지면 있는줄 알았다. 그런데 안나오더라.. key 를 통해 value 를 찾는 방법은 기본적으로 나오는데 내가 못 찾는 것이었던지 아님 진짜인지 이 반대는 없더라...
그래서 뻘짓이 시작되었다. 딕셔너리를 끝까지 사용하자라는 생각에 찾은 방법으로 key 와 value 를 서로 바꾸고 나서 답으로 필요한 key 1 인 value 를 찾는 것이다.
reverse_x_dict = dict(map(reversed, x_dictionary.items()))
reverse_y_dict = dict(map(reversed, y_dictionary.items()))
처럼 map() 에서 reversed 사용되었고,
최종적으로 key 1 인 value 가 return 되었다.
return reverse_x_dict[1], reverse_y_dict[1]
코드 보기
import sys
inputdata = sys.stdin.readline
import collections
def fnFourthPoint(xycoordinates_array):
x_dictionary = dict(collections.Counter(xycoordinates_array[0]))
y_dictionary = dict(collections.Counter(xycoordinates_array[1]))
reverse_x_dict = dict(map(reversed, x_dictionary.items()))
reverse_y_dict = dict(map(reversed, y_dictionary.items()))
return reverse_x_dict[1], reverse_y_dict[1]
xycoordinates_array = [[None for coord in range(3)] for xy in range(2)]
for i in range(3):
xycoordinates_array[0][i], xycoordinates_array[1][i] = map(int, inputdata().split())
result = fnFourthPoint(xycoordinates_array)
print(*result)
추가 하기
각 단계별로 이루어지는 딕셔너리 변화 확인을 위해 추가한 프린터들..
import sys
inputdata = sys.stdin.readline
import collections
def fnFourthPoint(xycoordinates_array):
x_dictionary = dict(collections.Counter(xycoordinates_array[0]))
y_dictionary = dict(collections.Counter(xycoordinates_array[1]))
print(f'x_dictionary: {x_dictionary}') # test print
print(f'y_dictionary: {y_dictionary}') # test print
reverse_x_dict = dict(map(reversed, x_dictionary.items()))
reverse_y_dict = dict(map(reversed, y_dictionary.items()))
print(f'reverse_x_dict: {reverse_x_dict}') # test print
print(f'reverse_y_dict: {reverse_y_dict}') # test print
# one_x_key = {x_crd for x_crd in x_dictionary if x_dictionary[x_crd] == 1} # for 문으로 value = 1 에 대한 key 찾기
# one_y_key = {y_crd for y_crd in y_dictionary if y_dictionary[y_crd] == 1} # for 문으로 value = 1 에 대한 key 찾기
print(f'reverse_x_dict[1] key 가 1 인 value: {reverse_x_dict[1]}') # key 가 1 인 value
print(f'reverse_y_dict[1] key 가 1 인 value: {reverse_y_dict[1]}') # key 가 1 인 value
return reverse_x_dict[1], reverse_y_dict[1]
xycoordinates_array = [[None for coord in range(3)] for xy in range(2)]
for i in range(3):
xycoordinates_array[0][i], xycoordinates_array[1][i] = map(int, inputdata().split())
print() # test print
print(f'xycoordinates_array: {xycoordinates_array}') # test print
result = fnFourthPoint(xycoordinates_array)
print() # test print
print(*result)
# 30 20
# 10 10
# 10 20
# xycoordinates_array: [[30, 10, 10], [20, 10, 20]]
# x_dictionary: {30: 1, 10: 2}
# y_dictionary: {20: 2, 10: 1}
# reverse_x_dict: {1: 30, 2: 10}
# reverse_y_dict: {2: 20, 1: 10}
# reverse_x_dict[1] key 가 1 인 value: 30
# reverse_y_dict[1] key 가 1 인 value: 10
# 30 10
'공부하기 > 백준' 카테고리의 다른 글
[Python] 백준 풀기 1149 - RGB거리 (0) | 2022.10.21 |
---|---|
[Python] 백준 풀기 1037 - 약수 (0) | 2022.10.20 |
[Python] 백준 풀기 5086 - 배수와 약수 (0) | 2022.10.19 |
[Python] 백준 풀기 1712 - 손익분기점 (2) | 2022.10.18 |
[Python] 백준 풀기 1912 - 연속합 (0) | 2022.10.15 |