코딩테스트/백준 단계별
[ 백준 7단계 ] 2869 달팽이는 올라가고 싶다.
scone
2022. 5. 13. 13:23
🥕 [ 백준 2869 ] 달팽이는 올라가고 싶다.
문제 링크
url : https://www.acmicpc.net/problem/2869
🍒 문제 분석
달팽이는 낮에 A만큼 올라가고 밤에 B만큼 내려갑니다.
V 높이에 도달하고 싶은 달팽이는 얼마나 걸릴까요
🥑 코드
import sys
A, B, V = map(int, sys.stdin.readline().split() )
day = (V-A) // (A-B)
temp = (A-B)*day
while True :
temp += A
day += 1
if temp >= V:
break
temp -= B
print(day)
🍓 내 해결 과정
1. 첫 시도
처음에는 그냥 day 0 부터 시작해서 V 도달 할때 까지 while 문 돌렸는데 시간초과가 나왔습니다.
2. 몇번의 시도 이후
V 에서 A만큼을 뺀 값을, 아침과 밤에 이동한 높이 (A-B) 로 나눈 후 day 값에다가 넣어줬습니다.
여기서부터 반복분을 돌려서 시간을 단축해 문제를 풀었습니다.
🌽 다른 사람 코드
JK 님 코드
import math
a, b, v = map(int, input().split())
print(math.ceil((v-b)/(a-b)))
(V-B) 를 (A-B) 로 나눈 뒤 올림 값을 구해서 주황색으로 표시한 부분에 가기까지의 day를 구했다.
만약 그 위치가 V와 같다면, 답을 구한 셈이고
만약 그 위치가 V보다 조금 밑에 있다면, B만큼 밤에 내려오기 전에 도착했다는 의미이므로
마찬가지로 그 위치가 답이 된다.
반복문 돌릴 필요도 없이 바로 구한 셈.
🍉 깨달은 점 및 정리
일반적으로는 반복문 돌려야겠다라는 생각으로 푸는게 맞는거고
JK님과 같은 직관적인 해답은 앞으로 생각하는 힘을 계속 기르면서 문제 보자마자 바로 떠오를 날이 있기를 바라야하지 않을까..
일단 한가지 크게 깨달은 건
머리로만 풀지말고 그림 그려가면서 푸는게 더 빠른다는 거