Kim Seon Deok
[백준] 2485 가로수 본문
https://www.acmicpc.net/problem/2485
임의의 간격으로 가로수가 심어져있다.
각 가로수의 간격이 같도록 가로수를 추가로 심어야 한다.
맨 처음 가로수의 수 N을 입력 받고 임의의 수를 번 입력한다. 이 때 맨 처음 입력한 수는 첫번째에 고정하고 맨 마지막에 입력한 수는 마지막에 고정한다.
N번 입력한 수를 already 리스트에 저장하고 이후 인덱스 - 이전 인덱스를 하여 간격을 구했다. 각 인덱스 마다의 간격을 gap_list리스트에 저장하였다.
0번째 리스트를 변수 n에 대입하고 gcd()함수를 통해 n과 gap_list인덱스와의 최대공약수를 구해 n에 새로 대입했다.
최대공약수를 간격으로 하며 맨 처음이 already[0]이고 맨 마지막이 already[-1]인 final 리스트를 생성했다.
(final리스트의 길이 - 기존에 심어진 가로수 already리스트의 길이)로 하니 메모리 초과가 발생하여 , 나무 간격을 최대공약수로 나눈 몫에 1을 빼어 심어야 하는 나무의 수를 구했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
from math import gcd
N = int(input())
already = []
for i in range(0,N):
a = int(input())
already.append(a)
gap_list =[]
for i in range(0,len(already)-1):
gap = already[i+1] - already[i]
gap_list.append(gap)
n = gap_list[0]
final = []
for i in range(1,len(gap_list)):
n = gcd(n,gap_list[i])
final.append(n)
sum = 0
for i in range(0,len(gap_list)):
a = (gap_list[i]//final[-1]) - 1
sum += a
print(sum)
|
cs |
'python > Algorithm' 카테고리의 다른 글
[백준] 20436 ZOAC 3 (0) | 2022.01.22 |
---|---|
[백준 14670] 병약한 영정 (0) | 2022.01.19 |
[백준] 2659 십자카드 (0) | 2022.01.14 |
[백준] 1244 스위치 켜고 끄기 (0) | 2022.01.14 |
[백준] 9012 - 괄호 (0) | 2022.01.14 |
Comments