-
[BOJ 20157, Python 3] 화살을 쏘자!알고리즘/BOJ 2021. 10. 4. 13:54반응형
https://www.acmicpc.net/problem/20157
풀이
좌표평면에서 한 방향으로 화살을 쏜다는 것은 기울기가 설정되어 있다는 뜻입니다.
그래서 제 1사분면부터 제 4사분면까지 defaultdict를 만들어주고, 각 좌표의 최대공약수를 통해 기울기를 구해주고 조건에 맞는 사분면에 넣어주면 됩니다.
x = 0 혹은 y = 0일 때는 따로 변수를 둬서 구해주고, 여기에 있는 값들중 최댓값을 구해주면 됩니다.
코드
1234567891011121314151617181920212223242526272829303132from math import gcdfrom collections import defaultdict as dfdinput = __import__('sys').stdin.readlineone = dfd(lambda : 0)two = dfd(lambda : 0)three = dfd(lambda : 0)four = dfd(lambda : 0)plus_x, minus_x, plus_y, minus_y = 0, 0, 0, 0n = int(input())for i in range(n):x, y = map(int, input().split())if x == 0:if y > 0: plus_y += 1else: minus_y += 1continueif y == 0:if x > 0: plus_x += 1else: minus_x += 1continuevx, vy = abs(x), abs(y)g = gcd(vx, vy)nx, ny = vx // g, vy // gif x > 0 and y > 0: one[str(nx)+'/'+str(ny)] += 1if x < 0 and y > 0: two[str(nx)+'/'+str(ny)] += 1if x < 0 and y < 0: three[str(nx)+'/'+str(ny)] += 1if x > 0 and y < 0: four[str(nx)+'/'+str(ny)] += 1ans = 0if len(one.values()) > 0: ans = max(ans, max(one.values()))if len(two.values()) > 0: ans = max(ans, max(two.values()))if len(three.values()) > 0: ans = max(ans, max(three.values()))if len(four.values()) > 0: ans = max(ans, max(four.values()))print(max(ans, plus_x, minus_x, plus_y, minus_y))cs 반응형'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ 23033, Python 3] 집에 빨리 가고 싶어! (0) 2021.10.05 [BOJ 23034, Python 3] 조별과제 멈춰! (0) 2021.10.05 [BOJ 20158, Python 3] 사장님 달려가고 있습니다 (0) 2021.10.04 [BOJ 20159, Python 3] 동작 그만. 밑장 빼기냐? (0) 2021.10.04 [BOJ 20160, Python 3] 야구르트 아줌마 야구르트 주세요 (0) 2021.10.04