๐Ÿงฉ Problem Solving/[๋ฐฑ์ค€]

[๋ฐฑ์ค€] 6064 ์นด์ž‰ ๋‹ฌ๋ ฅ (python ํŒŒ์ด์ฌ)

์ œ๋ด‰์•„ 2022. 7. 6. 22:26

https://www.acmicpc.net/problem/6064

 

6064๋ฒˆ: ์นด์ž‰ ๋‹ฌ๋ ฅ

์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋Š” ํ‘œ์ค€ ์ž…๋ ฅ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ž…๋ ฅ์€ T๊ฐœ์˜ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์ž…๋ ฅ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋Š” ํ•œ ์ค„๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

www.acmicpc.net

 

๋ค


์•„์ด๋””์–ด

1. ์‹œ๊ฐ„ ์ดˆ๊ณผ

  • ์ฒ˜์Œ์—๋Š” x, y๊ฐ’์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ 1์”ฉ ๋”ํ•ด๊ฐ€๋ฉฐ count๋ฅผ ํ–ˆ๋‹ค. ์ˆซ์ž๊ฐ€ ๋ฐ˜๋ณต๋˜๋ฉด -1์„ ์ถœ๋ ฅํ•˜๊ฒŒ ํ–ˆ๋‹ค.
  • ์ƒ๊ฐ์ด ๋„ˆ๋ฌด ์‰ฌ์› ๋Š”์ง€ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.
  • ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •

์ฝ”๋“œ ์„ค๋ช…

def find_K(M, N, x, y):
    K = x

    while K <= M * N:
        if (K - x) % M == 0 and (K - y) % N == 0:
            return K
        K += M
    return -1

 

๋ฐฑ์ค€์— ์žˆ๋Š” ์ฒซ ๋ฒˆ์งธ ์˜ˆ์ œ ์ผ€์ด์Šค 10 12 3 9๋กœ ์˜ˆ๋ฅผ ๋“ค์–ด ์„ค๋ช…ํ•˜๊ฒ ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ•  ์ˆซ์ž๋ฅผ K๋ผ๊ณ  ํ•˜์ž.

๊ทธ๋Ÿผ ๊ทธ K๋ผ๋Š” ์ˆซ์ž๋Š” K = 10 * p + 3 = 12 * q + 9๋ฅผ ๋งŒ์กฑํ•œ๋‹ค. (์—ฌ๊ธฐ์„œ p, q๋Š” ์ž์—ฐ์ˆ˜)

์‹์„ ๋ณ€ํ˜•ํ•ด์„œ ๋ณด๋ฉด (K - 3)์€ 10์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๊ณ , (K - 9)์€ 12๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง„๋‹ค.

์ด๋ฅผ ๋ฌธ์ž๋กœ ๋ฐ”๊ฟ”์„œ ์จ๋ณด๋ฉด (K - x)๋Š” M์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๊ณ , (K - y)๋Š” N์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง„๋‹ค.

 

์ด๊ฑธ ์ฝ”๋“œ์— ์ ์šฉํ•˜๋ฉด ๋œ๋‹ค. 

K๊ฐ’์€ M * N์„ ๋„˜์ง€ ์•Š์œผ๋ฏ€๋กœ K๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด์„œ ์œ„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค.

๊ทผ๋ฐ ์—ฌ๊ธฐ์„œ ๊ทธ๋ƒฅ K๋ฅผ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด ๋˜ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚œ๋‹ค. 

 

K๊ฐ’์„ ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๊ฒฐ๊ตญ K๊ฐ’์€ M * p + x ๋˜๋Š” N * q + y์ด๋ฏ€๋กœ 

K์˜ ์ดˆ๊ธฐ๊ฐ’์„ x๋กœ ์„ ์–ธํ•˜๊ณ  K๊ฐ’์„ M๋งŒํผ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด์„œ ํ™•์ธํ•ด๋ณด๋ฉด ๋œ๋‹ค.

x๋Œ€์‹  y, M ๋Œ€์‹  N์„ ์‚ฌ์šฉํ•ด๋„ ๋จ.


์ „์ฒด ์ฝ”๋“œ

import sys
T = int(input())

def find_K(M, N, x, y):
    K = x

    while K <= M * N:
        if (K - x) % M == 0 and (K - y) % N == 0:
            return K
        K += M
    return -1

for _ in range(T):
    M, N, x, y = map(int, sys.stdin.readline().rstrip().split())
    print(find_K(M, N, x, y))