BOJ(날짜계산) 1476

  1. 날짜계산

2. 날짜 계산

  1. 지구(E), 태양(S), 달(M)이라고 했을 때, 세 수는 서로 다른 범위를 가진다.
    • (1 ≤ E ≤ 15, 1 ≤ S ≤ 28, 1 ≤ M ≤ 19)
  2. 1년이 지날 때마다 세수는 모두 1씩 증가한다. 만약 어떤 수가 범위를 넘어가는 경우에는 1이 된다.
  3. 15년은 15 15 15로 나타낼 수 있고 16년이라면 E의 범위를 벗어나므로 1 15 15가 된다.
  4. E,S,M이 주어졌고 1년이 준규가 사는 나라에서 1 1 1 일 때, 준규 나라에서 E,S,M이 우리가 알고 있는 연도로 몇 년인지 구하는 프로그램 작성

E = E%15, S = S%28, M = M % 19다. for 문을 제한 시간이 2초이므로, 1초정도로 맞춰서, 1000000으로 두자. for문을 돌리면서 조건에 맞는 n을 찾는다.

  • 이렇게 한 뒤, 고민하다보니까 예외처리에서 계속 오류가 생겼다.

주의

  • 15, 28, 19가 바로 들어가면 나머지가 0이 되므로, 나머지가 0이 될 때 예외처리를 해줘야 한다.
  • 0일 때, 어떤 식으로 예외처리를 해줘야 하지 ?
  • 모르겠다. 문제에서 요구하는 방법을 모르겠다.
  • 질문 검색에서 찾아보니 다음을 알 수 있었다.
  1. 미리 -1을 뺀 값을 계산한 뒤, 마지막에 1을 더해서 출력해주는 방법
  • 이렇게 하면, 모두 0이 되는 경우의 수를 계산해줘야 할 필요가 없어진다.
  • 꽤나 오래 고민했는데. 이런 방법이 있구나 싶었다.
E, S, M = map(int, input().split())
i = 0
while(True):
    a, b, c = i % 15, i % 28, i % 19
    if a == E-1 and b == S-1 and c == M-1:
        break
    i += 1
print(i+1)
  1. 다른 방법 -> E,S,M을 i에서 뺀 뒤 구한다.
  • 15, 19, 28 보다 작은 수들에 대한 처리가 가능해진다.

E, S, M = map(int, input().split())
i = 1
while(True):
    if (i-E) % 15 == 0 and (i-S) % 28 == 0 and (i-M) % 19 == 0:
        print(i)
        break
    i += 1
  1. 미리 1을 더해줘서 계산한다.
E, S, M = map(int, input().split())
i = 0
while(True):
    a, b, c = i % 15+1, i % 28 + 1, i % 19 + 1
    if a == E and b == S and c == M:
        break
    i += 1
print(i + 1)

참고자료

코드플러스

0%