본문 바로가기
코딩/백준

알고리즘 - Python / 백준 - 2358번 : 평행선

반응형

2358번: 평행선 (acmicpc.net)

 

2358번: 평행선

첫째 줄에 n(1 ≤ n ≤ 100,000)이 주어진다. 다음 n개의 줄에는 각 점의 좌표가 주어진다. 만약 입력에 서로 같은 두 점이 주어지면, 그 두 점을 이용하여 직선을 만들 수 있다. 좌표는 절댓값이 231보

www.acmicpc.net

 


풀이

  • 각점의 좌표가 주어지고 x, y축에 평행하게 직선을 그릴 때 , 2개 이상의 점을 지나는 직선이 몇 개인지 구하는 문제다.
  • 딕셔너리를 통해 해당 x , y 좌표를 지나는 점이 몇개몇 개 있는지 기록하였고 딕셔너리의 전체 요소를 for로 돌며 직선을 몇 개 그릴 수 있는지 세주었다.
  • 주의할 점은 같은 점도 생각해야 한다는 것과 직선의 개수기 때문에 직선위의 여러 개의 점이 있다고 해서 여러 개의 직선으로 처리하면 안 된다는 점이다.
  • 너무 대충 푼 감이 없지 않아 있는데 , 좀 더 짧고 간결한 풀이가 가능할 것 같다.

 

import sys
n = int(sys.stdin.readline())
c = {}
y = {}
check_x = []
check_y = []
for _ in range(n):
    a,b = map(int , sys.stdin.readline().split(" "))
    check_x.append(a)
    check_y.append(b)
    if a in c:
        c[a].append(b)
    else:
        c[a] = []

    if b in y:
        y[b].append(a)
    else:
        y[b] = []
check_y = list(set(check_y))
check_x = list(set(check_x))

ans = 0
for i in check_x:
    if c[i]:
        ans += 1
for i in check_y:
    if y[i]:
        ans += 1
print(ans)

 

 

 

 

 

반응형