두 알림이 시각 0에 함께 울리고 이후 각각 a분, b분마다 울려요. periods의 각 항목 [a, b]마다 0 다음에 처음 함께 울리는 시각을 구해요. 그 시각이 limit보다 크면 해당 항목은 0으로 기록해요. 각 알림 쌍은 독립적이에요.
solution(periods, limit)가 순서대로 시각을 담은 리스트를 반환하도록 빈칸을 채워 주세요. 제공한 gcd는 두 양의 정수의 최대공약수를 반환해요.
매개변수와 반환값
- 쌍 수 n은 1
100, a와 b는 11,000이에요. - limit는 0~1,000,000이에요. 시각이 limit와 같으면 그 시각을 반환해요.
- 반환 리스트 길이는 n이에요.
예시
periods = [[4, 6], [5, 10], [3, 7]],limit = 20이면 결과는[12, 10, 0]이에요.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까지 반복해요. 하네스는 함수 호출을 위한 자체 연결이며 풀이의 반환 계약과 구분해요.