[PS]는 문제해결 및 알고리즘을 공부한 내용을 담고 있습니다.
문제는 백준 Online Judge, Leetcode에서 참고했으며, 본문에서는 문제 접근 방식과 새로 배운 내용을 담고 있습니다.

1934. 최소공배수

T = int(input())

for _ in range(T):
    A, B = map(int,input().split())
    setA = set()
    setB = set()
    if(A == B):
        print(A)
        continue
    elif(A%B == 0):
        print(A)
        continue
    elif(B%A == 0):
        print(B)
        continue
    else:
        for i in range(2, A+1):
            if(A%i == 0):
                setA.add(i)
        for i in range(2, B+1):
            if(B%i == 0):
                setB.add(i)
        setInter = setA & setB
        answer = A*B
        interLen = len(setInter)
        for i in range(interLen):
            currentNumber = setInter.pop()
            if(answer%currentNumber == 0):
                answer /= currentNumber
        print(int(answer))
  • 예시 Tc도 맞았고, 내가 생각하는 오류 지점도 다 해결했는데 4%에서 틀렸습니다가 나왔다
  • 유클리드 호제법을 읽고 코드를 구현했더니 해결됐다는 분이 있어서 그대로 해보려고 한다
def gcd(m,n):
    if n == 0:
        return m
    mod = m % n
    if mod != 0:
        m,n = n, mod
        return gcd(m,n)
    else:
        return n

T = int(input())

for _ in range(T):
    A,B = map(int,input().split())
    print(int(A*B/gcd(A,B)))
  • 유클리드 호제법을 구하는 함수 gcd를 그대로 따라했더니 맞았습니다가 나왔다.
  • 직접 gcd(13,17)을 따라가면서 결과를 구해봤는데 17%13, 13%4, 4%1과 같은 생각은 어떻게 떠올리는거지..? 일단 외우자
  • 해결 완료

2476. 주사위 게임

  • 해결 완료

2754. 학점 계산

  • 완전 쉬운 문제인데 돌아갔다
  • 해결 완료

7567. 그릇

  • 해결 완료