[백준] 1476 - 날짜 계산 (Python)

문제

https://www.acmicpc.net/problem/1476

문제 설명

변수 E, S, M의 범위가 각각 다르기 때문에 각 변수의 사이클이 다르다는 것에 집중해서 규칙을 찾아보려고 했다.

몇 가지 예시를 봐 보자!

(E, S, M)
= (15, 2, 11) -> 30 = (E)15+15 = (S)28+2 = (M)19+11
= (12, 1, 19) -> 57 = (E)15+15+15+12 = (S)28+28+1 = (M)19+19+19

굵은 글씨에 집중해서 보면 규칙을 찾을 수 있을 것이다.
굳이 식으로 표현하자면 아래처럼 표현할 수 있을 것 같다.

# e, s, m은 정수
(15*e)+E = (28*s)+S = (19*m)+M

제출 코드

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):
        break 
    year += 1

print(year)

결과


정리

개념

  • 브루트포스 알고리즘: 완전탐색 알고리즘이다. 즉, 가능한 모든 경우의 수를 모두 탐색하면서 요구조건에 충족되는 결과만을 가져온다.
    +) brute: 무식한, force: 힘 '무식한 힘' 알고리즘 이라고 해석할 수 있다.

주석있는 코드

# E: 1-15 / S: 1-28 / M: 1-19

# 입력받기
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):
        break
    # if 문에 해당하지 않을 때는 year에 1을 더해준다
    year += 1

# 결과값 출력
print(year)

느낀점

규칙은 찾았는데 그걸 코드로 만드는 과정에서 막혔다. 생각보다 훨씬 간단하게 코드를 짤 수 있다는 것을 알고서 신기했다..ㅎ

좋은 웹페이지 즐겨찾기