문제
풀이 (Python)
e,s,m=map(int,input().split())
result,tmp=0,0
while True:
result=s+tmp*28 #태양 기준 해당 년도=나머지(s입력값)+몫(tmp)*28(태양 주기)
E_mod=15 if result%15==0 else result%15 #해당 년도 기준에 맞춰 지구 값 조절
M_mod=19 if result%19==0 else result%19 #해당 년도 기준에 맞춰 달 값 조절
if E_mod==e and M_mod==m:break #입력값과 일치시에 종료
tmp+=1 #몫 증가
print(result)
설명 (Python)
태양이 주기가 28로 가장 길기 때문에 태양을 기준으로 whie문을 통한 반복으로 해당 조건이 일치하는지 판단하는 문제이다. 입력값은 각 X라는 년도를 각각 15, 28 ,19로 나눈 것과 같기 때문에 입력값 s를 기준으로 X와 일치하기 위한 result를 임의로 구하여 나머지 15와 19로 나눈 입력값 e, m을 비교한다.
Point 1) 변수의 범위
변수의 범위는 지구를 예로들면 1 <=e <=18이다. 이것이 의미하는 것은 정답인 X의 연도가 15년도인 경우 e는 0이 아닌 15이라는 것을 의미한다.
예로 들어 아래의 코드가 없이 if result%15==e and result%19==m:break 와 같은 if문만 존재하는 경우 X=18일 때 조건이 걸리지 않아 while문이 지속적으로 작동하게 된다.
E_mod=15 if result%15==0 else result%15
M_mod=19 if result%19==0 else result%19
위와 같은 부분을 처리하기 위하여 E_mod와 M_mod를 선언하여 나머지가 0인 경우 15와 19로 설정하도록 추가 코드를 작성하였다.
위의 코드는 if-else문을 한 줄로 작성한 것으로 아래의 코드와 동일하다.
if result%15==0:
E_mod=15
else:
E_mod=result%15
if result%19==0:
M_mod=19
else:
M_mod=result%19
파이썬을 사용하다 보면 한 줄 for문과 한 줄 if문을 매우 가독성 좋게 사용함으로써 이점을 가져가는 경우가 종종 있기에 사용법을 알아두는 것이 좋다.
'Baekjoon' 카테고리의 다른 글
[백준] 2304번 창고 다각형 (파이썬) (0) | 2024.01.12 |
---|---|
[백준] 10988번 팰린드롬인지 확인하기 (파이썬) (0) | 2024.01.12 |
[백준] 2231번 분해합 ( 파이썬 ) (0) | 2024.01.12 |
[백준] 1987번 알파벳 ( 파이썬) (0) | 2023.10.12 |
[백준] 10026번 적록색약 ( 파이썬 ) (0) | 2023.10.12 |