본문 바로가기
Learning-log/Algorithm 문풀

백준(파이썬) - 2884번, 2525번, 2480번(2022.10.13)

by why제곱 2022. 10. 20.

1. 2884번

 

1) 문제

 

2) 풀이

 

3) 문법 및 풀이과정

시간에서 분 단위가 45분보다 작을 때는 시에서 내림을 해와야 한다. 따라서 분이 45분 이상일 때와 아닐 때로 나누어서 if문을 작성해야 했다. 분이 45분이 넘어갔을 때는 그냥 분에서 45를 빼면 되지만 아닐 때는 1시간을 분 단위로 바꾼 후 45를 빼준다. 그럼 결과적으로 (입력된 분)+60-45=(입력된 분)+15가 최종적으로 45분을 뺀 후의 시간 중 분이 된다.

마지막으로 주의해야 할 것은 시간이 24시간 표현으로 사용되기 때문에 시가 0일 때가 있다는 것이다. 이 때는 elif처럼 시간에서 1을 빼는 것이 아닌 24-1=23이 되어야 하므로 출력에서 시간을 23으로 표기되도록 else문을 작성한다.

 

2. 2525번

 

1) 문제

 

2) 풀이

 

3) 문법 및 풀이과정

우선 입력될 시간과 분, 그리고 더해야 할 시간을 각각 h, m, time의 변수로 입력 받았다.

시간은 60진법을 사용한다. 따라서 m + time을 했을 때 60이 넘어간다면 시간으로 올림을 해줘야 한다. 이렇게 올림을 해줬을 때, 시는 24시간 표현단위를 사용하므로 h가 24를 넘어간다면 그 또한 24시간 단위로 표현해줘야 하므로 if문 안에 한 번 더 if문을 사용했다. 

시를 24시간 단위, 분을 60진법으로 표현하기 위해 처음엔 그냥 24를 빼고, 60을 빼는 방법도 생각해봤으나 입력된 time이 60분보다 큰 시간이 입력된다면 문제가 발생할 수 있다는 것을 바로 알아차렸다. 따라서 시간과 분을 각각 60, 24로 나눈 나머지를 활용해 24시표현, 60진법으로 결과가 출력되도록 코드를 짰다. 

 

3. 2480번

 

1) 문제

 

2) 풀이

 

3) 문법 및 풀이과정

이 문제에서 고민됐던 부분은 풀이의 elif에 해당하는, 2개의 주사위의 눈의 수가 같은 경우이다. 이 경우 세 주사위의 눈(a,b,c) 중 어느 것의 개수가 같을 지 불확실 하기 때문에 각각의 경우를 생각해야 했다. 그 중 가장 간단하게 구분하는 방법은 뭐가 있을까 생각하다가 위의 풀이가 나오게 됐다. 

a==b or b==c라면 결국 양 쪽에 모두 b가 들어가기 때문에 같은 눈의 수는 두 경우 어느 쪽이라도 b라고 할 수 있다. 따라서 elif문 안에 if문을 다시 써서 이 경우를 설정하고 아닐 경우는 a==c인 경우 밖에 없으므로 else문이 출력되게 했다.