본문 바로가기

프로그래밍/백준

백준 20157 - 화살을 쏘자! (파이썬)

난이도

골드 5

 

유형

수학

브루트 포스

해시맵

해결

실수형의 값을 이용하지 말고 분수꼴로 넣어주면 해결할 수 있다.

gcd를 이용하여 기약분수 꼴로 해시맵에 저장해 준 뒤 가장 큰 값을 출력해주면 된다.

코드

from sys import stdin
from collections import defaultdict
from math import gcd
input=stdin.readline

def gettilt(x,y):
    
    if x==0:
        if y>0:
            return '위'
        return '아래'
    
    if y==0:
        if x>0:
            return '오른쪽'
        return '왼쪽'
    div=gcd(x,y)
    return (x//div,y//div)
        

n=int(input())
arr=[map(int,input().split()) for i in range(n)]
dd=defaultdict(int)
for i in arr:
    dd[gettilt(next(i),next(i))]+=1

mx=0
for i in dd:
    mx=max(dd[i],mx)

print(mx)

좋은 / 비슷한 문제