[Baekjoon] 25375/아주 간단한 문제/Python/파이썬

·2025년 3월 21일
0

문제풀이

목록 보기
52/56
post-thumbnail

💡문제

 양의 정수 aa,bb가 주어지면, gcd(x,y)=agcd(x, y) = a이고 x+y=bx + y = b인 자연수 쌍 (x,y)(x, y)가 존재하는지의 여부를 출력하자.

  • 1Q1000001 ≤ Q ≤ 100\,000

  • 1a,b10181 ≤ a, b ≤ 10^{18}

입력

첫째 줄에 질의의 개수 QQ가 주어진다.
둘째 줄부터 QQ개의 줄에 걸쳐 정수 a,ba,b가 공백으로 구분되어 주어진다.

출력

질의마다 조건에 맞는 자연수 쌍이 존재하면 11, 그렇지 않으면 00을 줄마다 출력한다.

예제입력

2
1 4
2 3

예제출력

1
0

📖내가 작성한 Code

import sys

'''
25375
gcd(x,y) = a
x+y = b
인 자연수 존재 여부
시간 초과
-> gcd 최적화
'''


def check_role(q, array):
    result = []
    for i in range(0,q,2):
        a,b = int(array[i]), int(array[i+1])
        if b % a == 0 and 2*a <= b:
            result.append('1')
        else:
            result.append('0')

    return "\n".join(result)


def main():
    inputs = sys.stdin.read().split()
    sys.stdout.write(check_role(int(inputs[0])*2, inputs[1:]))


if __name__ == '__main__':
    main()

✍️풀이과정

gcd 사용해봤는데 바로 시간 초과. 알고보니까 10^18이라 전체 조회는 힘듬. 그래서 pa + qa = b 이니까 b%a인거 찾음. 그리고 a가 gcd니까 b가 2a 보다는 크다고 생각. 그냥 해봤는데 통과. 먼가 이거 아닌거 같은데...

사람들이 안풀어서인지 바로 1등


🧠 코드 리뷰

  1. 현재 코드 구조는 효율적이며 문제를 정확하게 해결합니다. 다만, 가독성을 높여야합니다.

🛠️AI 개선 코드

import sys

def process_test_cases(num_cases, test_cases):
    results = []
    for i in range(0, num_cases * 2, 2):
        a, b = int(test_cases[i]), int(test_cases[i+1])
        if b % a == 0 and 2 * a <= b:
            results.append('1')
        else:
            results.append('0')
    return "\n".join(results)

def main():
    inputs = sys.stdin.read().split()
    num_cases = int(inputs[0])
    test_cases = inputs[1:]
    sys.stdout.write(process_test_cases(num_cases, test_cases))

if __name__ == '__main__':
    main()

💻결과

백준문제 보러가기


🖱️참고 링크

파이썬 sys 라이브러리 참고

profile
우물 안에서 무언가 만드는 사람

0개의 댓글