본문 바로가기

Python(알고리즘,문제풀이)/BOJ (Bronze IV)

백준 27590번 / Sun and Moon - 파이썬

728x90

📚문제

출처 : 백준 27590번(https://www.acmicpc.net/problem/27590)

 

 

📝풀이

# 27590 Sun and Moon
ds, ys = map(int,input().split())
dm, ym = map(int,input().split())
s = ys-ds
m = ym-dm

while s != m:
    if s < m:
        s += ys
    else: m += ym
print(s)

해와 달의 공전주기는 각각 ys, ym

가장 빠른 공전 시기는 현재 지난 시간만큼을 제외한 ys-ds, ym-dm

태양의 주기 : ys-ds += ys

달의 주기 : ym-dm += ym

이 두가지가 일치하면 된다

ys-ds, ym-dm을 각각 초기값으로 잡고 

같아질 때가 정답

 

 

# 27590 Sun and Moon
ds, ys = map(int,input().split())
dm, ym = map(int,input().split())
s = ys-ds
m = ym-dm

res1 = s + ys 
res2 = m+ ym

# a,b의 최대공약수
def gcd(a,b):
    if a % b ==0:
        return b
    return gcd(b,a%b)

# a,b의 최소공배수
def lcm(a,b):
    return a*b // gcd(a,b)
print(lcm(res1,res2))

위의 코드는 구글링하여 다른 분의 코드를 참고한 거였는데

초기에 생각했던 최소공배수를 이용해서 다시 푼 문제

 

처음에 문제를 보고 바로 든 생각은 최소공배수로 풀면 되겠다는 생각이 들었다

그래서 해와 달의 각각 가장 빠른 다음 공전 시기

(ys-ds, ym-dm)의 최소공배수를 구했는데 틀렸다

그러다가 다른 코드로 풀면서

문제에 예시를 대입해가며 곰곰이 생각해보니

다음 공전 시기 + 태양과 달의 각 공전주기(ys,ym) 

의 최소공배수를 구해야 맞는거였다

 

 

 

 

728x90