공부하기/백준

[Python] 백준 풀기 3009 - 네 번째 점

XEV 2022. 10. 20. 21:45

파이썬 백준 2009번

브론즈3

https://www.acmicpc.net/problem/3009

 

3009번: 네 번째 점

세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.

www.acmicpc.net

 

 

 

 

문제 보기

분류: 기하 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