λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸƒ algorithm/boj

BOJ 9094 - μˆ˜ν•™μ  ν˜ΈκΈ°μ‹¬

by HandHand 2021. 9. 12.

문제

λ°±μ€€ 온라인 저지 - 9094번

풀이 κ³Όμ •

κ°€λŠ₯ν•œ λͺ¨λ“  쑰합을 λ§Œλ“€μ–΄λ³Έ λ‹€μŒ 주어진 쑰건을 λ§Œμ‘±ν•˜λŠ” μ‘°ν•©μ˜ 개수λ₯Ό κ΅¬ν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€.

μ²˜μŒμ— a 와 b 의 μ‘°ν•©μ˜ κ°œμˆ˜κ°€ 10000개λ₯Ό λ„˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— λ‹¨μˆœ μ‘°ν•©κ°œμˆ˜λ₯Ό λ§Œλ“€μ–΄μ„œ μ‹œλ„ν–ˆλŠ”λ°

ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ˜ 개수 T λ₯Ό κ³ λ €ν•˜μ§€ λͺ»ν•΄μ„œ μ‹œκ°„ μ΄ˆκ³Όκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.


이λ₯Ό μœ„ν•΄ a, b, m 을 μƒνƒœλ³€μˆ˜λ‘œ ν•˜λŠ” λ©”λͺ¨μ΄μ œμ΄μ…˜μ„ μ μš©ν•΄μ„œ μ€‘λ³΅λœ 계산을 μ€„μ΄λŠ” λ°©μ‹μœΌλ‘œ ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ½”λ“œ


import sys


def solution():
    ret = 0

    for a in range(1, n):
        for b in range(a + 1, n):
            if memo[a][b][m] != -1:
                ret += memo[a][b][m]
                continue

            numerator, denominator = (a**2 + b**2 + m), (a * b)

            if numerator % denominator == 0:
                ret += 1
                memo[a][b][m] = 1
            else:
                memo[a][b][m] = 0

    return ret


if __name__ == '__main__':
    T = int(input())
    memo = [[[-1 for _ in range(101)] for _ in range(101)] for _ in range(101)]

    for _ in range(T):
        n, m = list(map(int, sys.stdin.readline().split()))
        answer = solution()

        print(answer)
λ°˜μ‘ν˜•

'πŸƒ algorithm > boj' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

BOJ 5076 - Web Pages  (0) 2021.07.19
BOJ 1920 - 수 μ°ΎκΈ°  (0) 2021.07.05
BOJ 13700 - μ™„μ „ 범죄  (0) 2021.06.29
BOJ 14950 - μ •λ³΅μž  (0) 2021.06.25
BOJ 1197 - μ΅œμ†Œ μŠ€νŒ¨λ‹ 트리  (0) 2021.06.18

πŸ’¬ λŒ“κΈ€