백준 5086번 풀이

문제

앞의 수가 뒤의 수와 어떤 관계인지 출력하면 된다. (약수 or 배수 or 무관)

풀이

자 우리 일단 들어가기전에 약수랑 배수가 뭔지 알아보고 가자. 이거 초딩때 한거라 다 까먹은 분들 계십니다, 예…

약수는 어떤 수를 딱 나눠 떨어지게 나눌 수 있는 수이고, 배수는 어떤 수로 딱 나눠 떨어지게 나눌 수 있는 수이다. 생각해봅시다. 5는 10의 약수이고 반대로 10은 5의배수이다. 1000은 8의 배수이고(125로 떨어짐) 8은 1000의 약수이다. 가릿?

import sys

while True:
    m, n = map(int, sys.stdin.readline().split())

그리고 입력에 몇줄 받는다 이런거 없고 0 0 들어올때까지 받잖아요? 이게 뭔 소리냐면 와일트루(while True) 쓰라는 얘깁니다. 걍 무한뺑뺑이 돈다 이거지. 그러면 뭐가 필요해요? 그죠 나갈 조건 설정해야죠.

import sys

while True:
    m, n = map(int, sys.stdin.readline().split())
    if m == 0 and n == 0:
        break
    elif m <= n and n % m == 0:
        print('factor')
    elif m >= n and m % n == 0:
        print('multiple')
    else: 
        print('neither')

자 급하니까 알아서 따라오십쇼. if문에 있는건 반복문 나가는 조건, 즉 0 0에 대한 로직이다. 0 0이 들어오면 나가라는 얘기다. 그리고 약수는 왼쪽이 오른쪽보다 작거나 같고 오른쪽으로 왼쪽을 나누었을 때 나누어 떨어지면(나머지가 0이면) 약수다. 배수는 왼쪽이 오른쪽보다 크거나 같고(근데 배수가 자기자신 포함이던가…) 왼쪽으로 오른쪽을 나누었을 때 나머지가 0이면 배수. 둘이 방향 반대입니다. 그리고 둘 다 아니면 무관.