← 실전 문제

함께 울리는 알림 주기

Python빈칸 채우기

두 알림이 시각 0에 함께 울리고 이후 각각 a분, b분마다 울려요. periods의 각 항목 [a, b]마다 0 다음에 처음 함께 울리는 시각을 구해요. 그 시각이 limit보다 크면 해당 항목은 0으로 기록해요. 각 알림 쌍은 독립적이에요.

solution(periods, limit)가 순서대로 시각을 담은 리스트를 반환하도록 빈칸을 채워 주세요. 제공한 gcd는 두 양의 정수의 최대공약수를 반환해요.

매개변수와 반환값

  • 쌍 수 n은 1100, a와 b는 11,000이에요.
  • limit는 0~1,000,000이에요. 시각이 limit와 같으면 그 시각을 반환해요.
  • 반환 리스트 길이는 n이에요.

예시

  1. periods = [[4, 6], [5, 10], [3, 7]], limit = 20이면 결과는 [12, 10, 0]이에요.
  2. periods = [[2, 3], [8, 8], [1, 9]], limit = 8이면 결과는 [6, 8, 0]이에요.

실행용 입출력

첫 줄에 n limit, 다음 n줄에 a b를 입력해요. 반환 리스트를 공백으로 구분해 한 줄에 출력해요.

예시 입력

3 20
4 6
5 10
3 7

예상 결과

12 10 0

예시 입력

3 8
2 3
8 8
1 9

예상 결과

6 8 0
핵심 개념
  • number-theory-basic: 최초 공통 시각은 최소공배수예요. 양의 정수 a·b에서는 a * b // gcd(a, b)로 구해요. %는 나머지, //는 정수 몫이에요.
  • function-design: 재귀 함수는 자기 자신을 다시 호출해요. 나머지가 0이면 멈추고, 그 외에는 더 작은 수의 최대공약수를 구해요.
  • conditionals: value if condition else other는 조건에 따라 하나의 값을 고르는 표현이에요. 상한을 포함하는지 확인해요.

answer = []는 빈 리스트, .append(value)는 맨 뒤에 값 하나를 추가해요. print(*answer)의 *는 리스트 항목을 개별 인자로 풀어 한 줄에 출력해요.

입력 하네스의 input()은 한 줄의 문자열을 읽고, .split()은 공백으로 항목을 나눠요. map(int, ...)는 각 항목을 정수로 바꾸고 list(...)는 그 결과를 리스트로 모아요. range(n)은 0부터 n-1까지 반복해요. 하네스는 함수 호출을 위한 자체 연결이며 풀이의 반환 계약과 구분해요.

코드 작성과 채점은 로그인 후 이용해요

로그인하고 풀기