천 리 길도 한 걸음부터

[python] BOJ 1476번: 날짜 계산 (220103) 본문

👩‍💻 STUDY/알고리즘

[python] BOJ 1476번: 날짜 계산 (220103)

눅눅한 김말이 2022. 1. 3. 12:01
 

1476번: 날짜 계산

준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다. 지구를 나타

www.acmicpc.net

  결과   틀렸습니다
  소요 시간   45분
  언어   Python 3

 

분명 쉬운 문제같은데 생각처럼 풀리지 않았다.
아래 코드마저도 [알고리즘 분류 > 중국인의 나머지 정리]에서 힌트를 얻어 작성했다.
s의 값이 가장 크기 때문에 이를 활용하면 어떨까에서 시작했지만 틀렸다고 나와서 질문 검색으로 확인해 본 결과 e, s, m의 값이 하나라도 15, 28, 19인 경우 처리할 수 없는 코드였고 예외처리를 하는 것은 비효율적이겠다고 생각해 멈췄다.
과거부터 생각해보면 변수를 하나 생성하면 쉽게 풀릴 문제임에도 잘 활용하지 않는데 이 습관을 고쳐야겠다.

# e, s, m = map(int, input().split())

# while s <= 7980:
#   if s%15 == e and s%19 == m:
#     print(s)
#     break
    
#   elif e*s*m == 7980:
#     print(7980)
#     break

#   s += 28
  결과   맞았습니다!!
  소요 시간   20분
  언어   Python 3

 

질문 검색으로 다른 언어로 힌트를 보았다.
년도에서 입력받은 지구, 태양, 달을 빼서 최대 범위로 나눈 나머지가 0이 될 경우인 것을 눈치채서 작성할 수 있었다.
왜 이렇게 풀어야 하는지는 지금은 이해했지만 몇 주 뒤에 다시 풀어봐야겠다.

e, s, m = map(int, input().split())
year = 1

while True:
  if (year-e)%15 == 0 and (year-s)%28 == 0 and (year-m)%19 == 0:
    print(year)
    break
  year += 1

며칠 전 for문 사용하는 단순 구현 문제도 거의 1시간 50분 소요되었는데 문제를 쉬었더니 감을 잃은 것 같다.