문제
코드
My answer
e,s,m=list(map(int,input().split()))
if(e==15):e-=15
if(s==28):s-=28
if(m==19):m-=19
n=1
while(1):
if(n%15==e and n%28==s and n%19==m):
print(n)
break
else:n+=1
Another answer
e, s, m = map(int, input().split())
a = (6916 * e + 4845 * s + 4200 * m) % 7980
print(a if a else 7980)
풀이
간단해보이는 문제였는데 생각보다 엄청 헤맸다. 우선 맨처음에 내코드가 계속 시간초과가 났었는데, 그 이유는 맨 처음 조건문3개를 안적어줘서였다. 저 조건문을 안적어주면 왜 오류가 나느냐. 우선 아래 반복문은 그냥 문제 그대로를 해석한것이다. 이때 e,s,m이 15,28,19가 들어오면 무한루프가 돌게된다. 15,28,19는 범위의 최댓값이므로 16,29,30부터 1로 인식하고 15,28,19는 0으로 인식을 해줘야된다. 그래서 저 조건문을 써준것이다. 그리고 아래 코드는 [중국인의 나머지 정리] 라는 알고리즘인데 이해하려고 노력해봐도 모르겠다.. 궁금한 분은 확인해보길 바란다. 우선 13 mod(7)이라는 의미는 7로 나눴을 때의 나머지가 13이라는 의미이다.
728x90
반응형
'코딩테스트 > 백준[Python]' 카테고리의 다른 글
[Python] 백준 #6588- 골드바흐의 추측 [try_again] (0) | 2021.12.09 |
---|---|
[Python] 백준 #10610- 30 (0) | 2021.12.09 |
[Python] 백준 #2004- 조합 0의 개수 (0) | 2021.12.07 |
[Python] 백준 #1676- 팩토리얼 0의 개수 (0) | 2021.12.07 |
[Python] 백준 #10872- 팩토리얼 (0) | 2021.12.07 |