Kim Seon Deok

[백준] 2485 가로수 본문

python/Algorithm

[백준] 2485 가로수

seondeok 2022. 1. 14. 23:32

https://www.acmicpc.net/problem/2485

 

2485번: 가로수

첫째 줄에는 이미 심어져 있는 가로수의 수를 나타내는 하나의 정수 N이 주어진다(3 ≤ N ≤ 100,000). 둘째 줄부터 N개의 줄에는 각 줄마다 심어져 있는 가로수의 위치가 양의 정수로 주어지며, 가

www.acmicpc.net

임의의 간격으로 가로수가 심어져있다.

각 가로수의 간격이 같도록 가로수를 추가로 심어야 한다.

맨 처음 가로수의 수 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
 
= 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)
 
 
= 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