99클럽 코테 스터디 37일차 TIL (수학적 호기심) - 백준

말하는 감자·2024년 8월 27일
1

99클럽 3기

목록 보기
37/42
post-thumbnail

안녕하세요!

오늘은 99클럽 코테 스터디 37일차입니다. 오늘은 컨디션이 너무 안좋네요.. 그래도 어쩔수있나요? keep going!해야죠.

오늘 문제는 오랜만에 비교적 쉬운 문제였습니다. 그럼 살펴볼까요?


1. 오늘의 학습 키워드

  • 완전 탐색
  • 브루트포스

2. 문제: 수학적 호기심 (9094번)

수학적 호기심

시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초128 MB60993389292157.648%

문제

두 정수 n과 m이 주어졌을 때, 0 < a < b < n인 정수 쌍 (a, b) 중에서 (a2+b2+m)/(ab)(a^2+b^2+m)/(ab)가 정수인 쌍의 개수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, n과 m이 주어진다. 두 수는 0보다 크고, 100보다 작거나 같다.

출력

각 테스트 케이스마다 문제의 조건을 만족하는 (a, b)쌍의 개수를 출력한다.

예제 입력 1 복사

3
10 1
20 3
30 4

예제 출력 1 복사

2
4
5

출처

ICPC > Regionals > Asia Pacific > Korea > Asia Regional - Taejon 2001 PB번

알고리즘 분류


3. 나의 풀이

오늘 문제는 완전 탐색 기반의 문제입니다. 두 정수 n과 m이 주어졌을때 문제의 수식을 만족한다면 갯수를 카운트하여 n과 m에 해당하는 개수를 출력하는 전형적인 완전 탐색 유형의 문제입니다.

바로 코드로 살펴보겠습니다.

import sys

def ispair(n,m):
    cnt = 0
    for a in range(1,n):
        for b in range(a+1,n):
            if (a ** 2 + b ** 2 + m) % (a * b) == 0:
                cnt += 1
    return cnt

T = int(sys.stdin.readline().strip())
for _ in range(T):
    n, m = map(int,sys.stdin.readline().split())
    print(ispair(n,m))

너무 스무스하죠?

문제를 살펴보시면 0 < a < b < n이므로 이것을 이중 반복문으로 표기하고 조건을 만족한다면 카운트를 하는 코드입니다.

결과


마무리

요근래 가장 쉬운 문제였습니다. 주어진 변수의 범위를 반복문, 그 반복문내에서 조건을 만족하면 카운트하는 완전 탐색 기반의 문제였습니다.

읽어주셔서 감사합니다.

profile
할 수 있다

0개의 댓글