코딩/백준알고리즘
[파이썬] 10. 기본수학...백준(2292, 2869)
레이첼 맥
2022. 9. 12. 17:46
[2292] 벌집
해결 포인트
시작(1)로부터 주위에 둘러싼 외벽의 방 갯수가 갖는 규칙을 찾아보면 쉽게 풀이 가능하다.
시작(1)은 방하나 그자제라고 생각하면된다.
답안
a = int(input())
if a == 1: # 처음 1은 방 한개 그 자체이다.
print(a)
else: # 이후 외벽들은 6의 배수로 증가
cnt = 1
b = 1
while b < a:
b += cnt*6 # 벌집의 갯수를 파악하기위함
cnt += 1 # 외벽의 갯수를 파악하기위함
print(cnt)
a가 1인 경우 1개의 방 그 자체이기 때문에 시작으로 조건을 걸어준다.
이후 외벽 부턴 6의 배수로 증가한다는 점을 확인할 수 있다.
b에는 방의 갯수를 알기위해 6의 배수를 계속 더해 대입해주고
그때 마다 카운트를 통해 외벽의 갯수를 파악한다.
[2869] 달팽이는 올라가고 싶다
해결 포인트
로직 구현은 쉽게 가능할것이다...
그러나 문제는 시간초과이다.
for문 while문 반목문을 사용하면 안된다.
로직을 간단하게 식으로 바꿔줘야한다.
답안
import sys
a,b,v = map(int,sys.stdin.readline().split())
cnt = (v-b)/(a-b)
if cnt == int(cnt):
print(int(cnt))
else:
print(int(cnt)+1)
시간 제한이 걸려있기에 reline을 사용해줬다.
a = 올라감
b = 내려감
v = 총 높이
기본적으로는 v / a-b 를 떠오르겠지만 밤에 내려간다는것을 고려했을때 애초에 v(총 높이)에서 b(내려감)을 빼주고 시작하자.
나눗셈을 진행하면 소숫점이 나올것이다.
2.0 이면 2일 걸리는거지만 2.1은 3일 걸린다는것이다. int형으로 소숫점을 버리고 +1 시켰다.