책너두 - 알고리즘 챌린지[8/20]

Moon·2023년 7월 20일
0
post-thumbnail

오늘의 문제 : 화살을 쏘자


Dict를 활용해 4사분면과 축 위를 구분한 후 입력값의 기울기를 구하고, 가장 많은 횟수를 출력했다.

if if if 이런 식의 풀이를 하다보면 더 좋은 풀이가 있지 않을까 항상 고민된다. 코드가 너무 길어져서 (60줄 정도 나왔다) 다른 분들의 코드를 봤는데 비슷한 거 같긴하다. 뭔가 더 뾰족한 풀이가 있으면 좋겠다!

추가) 다른 분들 풀이 중에 최대공약수로 나눠서 x,y값을 쌍으로 저장하는 코드가 가독성은 더 좋은 것 같다. 그런데 시간복잡도와 공간복잡도는 높아서 이럴 때는 어떤 코드를 선호해야할지 고민된다


import sys
n = int(sys.stdin.readline())
balloon = dict()

for _ in range(n) :
    x, y = map(int, sys.stdin.readline().split())

    if x != 0 and y != 0 :
        slope = y/x

        if x > 0 and y > 0 :
            if (1, slope) not in balloon :
                balloon[(1,slope)] = 1
            else :
                balloon[(1,slope)] += 1

        elif x < 0 and y > 0 :
            if (2, slope) not in balloon :
                balloon[(2,slope)] = 1
            else :
                balloon[(2,slope)] += 1
        
        elif x < 0 and y < 0 :
            if (3, slope) not in balloon :
                balloon[(3,slope)] = 1
            else :
                balloon[(3,slope)] += 1

        else :
            if (4, slope) not in balloon :
                balloon[(4,slope)] = 1
            else :
                balloon[(4,slope)] += 1

    else :

        if x > 0 and y == 0 :
            if "a" not in balloon :
                balloon["a"] = 1
            else :
                balloon["a"] += 1
        elif x < 0 and y == 0 :
            if "b" not in balloon :
                balloon["b"] = 1
            else :
                balloon["b"] += 1
        elif x == 0 and y > 0 :
            if "c" not in balloon :
                balloon["c"] = 1
            else :
                balloon["c"] += 1

        else :
            if "d" not in balloon :
                balloon["d"] = 1
            else :
                balloon["d"] += 1

print(max(balloon.values()))
profile
안녕하세요. Moon입니다!

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

가치 있는 정보 공유해주셔서 감사합니다.

답글 달기