https://level.goorm.io/exam/195684/프로젝트-매니징/quiz/1

문제는 흔하디 흔한 시간 더하기 문제다.

 

project = int(input())
time, minute = map(int, input().split())
minute += sum(int(input()) for _ in range(project))
	
time += minute // 60
time %= 24
minute %= 60

print(time, minute)

TLE를 걱정해야 할 문제도 아니고, 입력 숫자도 worst 103개라 sys.stdin.readline은 생략했다.

시와 분이 주어졌을 때, 일일이 더하면서 60분을 넘겼는지 확인할 필요가 없다.

모든 입력을 다 더한 뒤, 마지막에 60분을 넘어가는지 24시를 넘어가는지만 확인하면 된다.

 

minute += sum(int(input()) for _ in range(project))

조금 특이하다고 생각할 수 있는 부분이다.

보통 list comprehension을 통해서 수를 입력하지만, 괄호를 굳이 사용해주지 않아도 되는 경우가 있다.

list comprehension한 결과를 다른 함수로 감싸주는 경우에, 괄호를 사용하지 않아도 동작한다.

이런 기능을 'Generator expression'이라고 한다.

 

해석하자면, range(project)만큼 for문을 돌면서, int를 받아 전부 더하라는 코드이다.

sum()이야 iterable 객체에서 모든 요소를 더하는 함수라, 시간이나 메모리에 큰 상관이 없다.

하지만 all()이나 any()를 사용할 경우에는 short circuit evaluation으로 시간면에서 효율적이고, lazy evaluation으로 메모리 효율도 얻을 수 있다.

 

time += minute // 60
time %= 24
minute %= 60

그리고 시간은 60분을 초과한 만큼 더하고, 24를 초과한 만큼 빼준다.

분도 60을 초과한 만큼 빼주면(나머지와 같다), 시와 분을 구하는 코드 완성이다.

'PS > 9oormthon Challenge' 카테고리의 다른 글

구름톤 챌린지 Week 2 - Day 6  (0) 2023.08.25
구름톤 챌린지 Week 1 - Day 5  (0) 2023.08.19
구름톤 챌린지 Week 1 - Day 4  (0) 2023.08.19
구름톤 챌린지 Week 1 - Day 3  (0) 2023.08.19
구름톤 챌린지 Week 1 - Day 1  (0) 2023.08.19

+ Recent posts