[Python] 백준 2358번 : 평행선

2025. 4. 11. 22:17

99클럽 코테 스터디 | 비기너 | 10일차



접근 방법

 x축 또는 y축에 평행한 직선의 개수는 아래와 같은 조건을 만족한다. 
   - x축에 평행 : y끼리의 좌표가 같아야 함
   - y축에 평행 : x끼리의 좌표가 같아야 함

 

만일 (0, 0), (5, 0), (10, 0)이라는 좌표가 주어지면, 이 세 점은 동일한 y 좌표를 가지고 있지만 실제로 x축에 평행한 직선은 1개만 생성된다. 따라서 x 좌표(혹은 y 좌표)가 2개 이상 나타나는 경우 평행선이 1개 나타난다고 간주하고 문제를 접근했다.

 

이를 해결하기 위해 아래와 같은 단계로 나누었다.

 
1. x 좌표들을 key로 가지고, 모든 점들에서 x 좌표가 나타난 횟수를 value로 가지는 dictionary인 dict_x를 정의한다
2. y 좌표들을 key로 가지고, 모든 점들에서 y 좌표가 나타난 횟수를 value로 가지는 dictionary인 dict_y를 정의한다

3. 모든 점들에 대하여 for문을 돌며 dict_x와 dict_y에 x, y 좌표가 나타난 횟수를 센다

4. dict_x와 dict_y에서 vaule 값이 2개 이상인 경우, 평행한 선이 존재한다고 볼 수 있으므로, value의 값이 2개 이상인 key들의 개수를 return 한다

 


def solution(array):
    n = len(array)
    dict_x = dict()
    dict_y = dict()
	
    # 1. 출현한 모든 x 좌표와 y 좌표가 저장된 dict_x와 dict_y 정의 
    for i in range(n):
        dict_x.setdefault(array[i][0], 0)
        dict_y.setdefault(array[i][1], 0)
	
    # 모든 점들에 대하여 각각의 좌표가 몇 번씩 등장하는지 count
    for coord in array:
        if coord[0] in dict_x:
            dict_x[coord[0]] += 1
        if coord[1] in dict_y:
            dict_y[coord[1]] += 1
	
    # dict_x와 dict_y에서 value가 2 이상인 것들이 평행선이므로, 해당 점들의 개수를 count
    count_parallel_x = sum(1 for value in dict_x.values() if value >= 2)
    count_parallel_y = sum(1 for value in dict_y.values() if value >= 2)

    print(count_parallel_x + count_parallel_y)


n = int(input())
coordinate_list = []

for _ in range(n):
    x, y = map(int, input().split())
    coordinate_list.append([x, y])

solution(coordinate_list)

BELATED ARTICLES

more