TIL

40일차

haedal-uni 2021. 10. 22. 23:47
728x90

 

알고리즘 작성하면서 몰랐던 것

// 정수 부분만 구하기

% 나머지

math.ceil(i) : 올림

https://dpdpwl.tistory.com/94

 

 

알고리즘 작성

오늘도 알고리즘을 작성했다.

그 중에 하나를 설명해보자면 백준 알고리즘 2869인 달팽이는 올라가고 싶다를 작성했다.

처음에 어떻게 작성해야할지 몰라서 예제 입력 중 하나를 골라서 풀어썼다.

 

2
-1
=1

1+2
-1
=2

 

이렇게 쓰고 이 수식을 풀어서 작성했다.

a, b, v = map(int, input().split())
num = 0
while True:
    num += 1
    if v <= (a * (num) - b * (num - 1)):
        print(num)
        break

 

예제에 있는 3개 중에 2개는 실행되었는데 하나가 실행하는데 너무 오래걸려서 그냥 제출해봤다.

그랬더니 시간초과로 실패했다..

 

그래서 어떻게 하면 예제 3에 나오는 100 99 1000000000을 입력했을 때 한번에 출력 값이 나올까 생각 하다가

for문으로 대입이 아니라 무언가 나눠서 계산을 딱 떨어뜨리면 시간이 오래걸리지 않을 것 같았다.

 

작성한 코드 중에서 

v <= (a * (num) - b * (num - 1)) 

이 수식을 풀어써봤다. 

풀어쓸 때 num을 치기 귀찮아서 num을 i로 바꿔서 작성했다.

 

ai - bi +b
(a-b)i + b >= v
(a-b)i >= v-b
i >= (v-b)/(a-b)

 

이렇게 나온 (v-b)/(a-b) 값을 print 했더니 예제 중 하나에서 소수점으로 나왔다.

그래서 올림을 해야했는데 올림을 어떻게 해야할지 몰라 검색했고

import math 후 math.ceil을 사용하면 된다고 하여 아래와 같이 작성해서 제출했다.

 

import math
a, b, v = map(int, input().split())
print(math.ceil((v-b)/(a-b)))

 

시간초과가 안나오고 맞았다고 떴다..!!

 

다른 사람들이 한 걸 보니 어떤 분은 math 모듈을 사용없이 한 줄로 작성한거 보고 놀랐다.

a,b,c=map(int,input().split());print(int((c-a)/(a-b)+.99)+1)

 

...!!!

 

나는 일단 풀어쓰고 나중에 줄여가면서 제출해야할 것 같다.

알고리즘 강의도 너무 어려워서 어떤 건 그냥 보는 것으로도 이해가 안되는 게 있고

학교에서 배웠던 것을 다시 강의로 볼 때는 괜찮았었는데 막상 내가 코드로 작성하라고 하면 잘 모를 것 같다😅

 

728x90

'TIL' 카테고리의 다른 글

44일차  (0) 2021.10.27
43일차  (0) 2021.10.25
39일차  (0) 2021.10.21
38일차  (0) 2021.10.20
37일차  (0) 2021.10.19