[Python] % 연산자로 인한 시간 초과

조시현·2022년 8월 17일
0

Python

목록 보기
6/8

백준 문제 1476번 날짜 계산을 푸는데 아무리 생각해도 알고리즘은 맞는거 같은데 시간초과가 계속 나오는 것이다.

E, S, M = map(int,input().split())

# E 15 S 28 M 19
if E == 15: E = 0
if S == 29: S = 0
if M == 19: M = 0

Y = 1

while True:
  if Y % 15 == E and Y % 19 == M and Y % 28 == S:
    break;
  Y += 1

print(Y)

계속 곰곰히 고민해 본 결과 반복문 단계에서 문제는 아닐꺼 같아서
다른 부분을 보니 입력 값을 받는 부분이 아니라면
if 문인데 if 문을 곰곰히 한~ 참을 보니 이유를 도저히 모르고 딴 짓을 하다 보니

아차! %(나머지 연산자)는 시간을 많이 잡아 먹는다는 말을 어디에서 들어본거 같아서 고쳐보니

드디어 됬다...

어디서 들었을까 생각해보니 나머지 연산자가 아니고 나누기 연산(/)은 느린 연산이여서 >>(비트연산자)로 나누기를 한다는 곳에서 영감을 받은거 같기도하다.
정말 신기하다 우연이 겹쳐서 된것이다.

공부를 더 열심히해야겠따

고친 코드

# %연산은 속도가 오래걸린다.

E, S, M = map(int,input().split())

Y = 1

while True:
  if (Y-E) % 15 == 0 and (Y-S) % 28 == 0 and (Y-M) % 19 == 0 :
    break
  Y += 1

print(Y)

출처

https://imksh.com/48

profile
소프트웨어 관련 고민을 좋아하고 상황에 맞는 답을 함께 찾아가는 과정을 좋아합니다. 😀

0개의 댓글