[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)
'코딩테스트 > BOJ' 카테고리의 다른 글
[Python] 백준 1158번 : 요세푸스 문제 (0) | 2025.04.09 |
---|---|
[Python] 백준 3986번 : 좋은 단어 (0) | 2025.04.08 |
[Python] 백준 31458번 : !!초콜릿 중독 주의!! (0) | 2025.04.02 |
[Python] 백준 10820번 : 문자열 분석 (0) | 2025.04.01 |
[Python] 백준 1032번 : 명령 프롬프트 (0) | 2025.03.31 |