알고리즘 작성하면서 몰랐던 것
// 정수 부분만 구하기
% 나머지
math.ceil(i) : 올림
알고리즘 작성
오늘도 알고리즘을 작성했다.
그 중에 하나를 설명해보자면 백준 알고리즘 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)
...!!!
나는 일단 풀어쓰고 나중에 줄여가면서 제출해야할 것 같다.
알고리즘 강의도 너무 어려워서 어떤 건 그냥 보는 것으로도 이해가 안되는 게 있고
학교에서 배웠던 것을 다시 강의로 볼 때는 괜찮았었는데 막상 내가 코드로 작성하라고 하면 잘 모를 것 같다😅