방명록
- [알고리즘][파이썬] 백준_2869번_달팽이는 올라가고 싶다2021년 11월 19일 15시 34분 45초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
달팽이가 있다.
변수 A는 낮에 기어 올라가는 거리,
변수 B는 밤에 잘때 미끄러지는 거리,
변수 V는 정상이며, 정상에 도달할 경우 밤에 미끄러지지 않는다.
이때 정상에 몇일만에 도착할 수 있는지 출력해야 한다.
1차 시도
# 1차시도(결과: 시간 초과) A, B, V = map(int, input().split()) per = 0 # 달팽이의 performance 변수 days = 1 # 구하고자 하는 정상 도달일 변수(기본값을 1일로 주었다) while 1: per += A if per >= V: break per -= B days += 1 print(days)
예제의 값을 입력하여 출력하니 결과값은 동일하게 출력되었다.
하지만 예제 입력 3번(100 99 1000000000)의 경우 매우 오랜 시간이 걸렸다.
그럼에도 불구하고 제출하였으나 결과는 "시간 초과".
2차 시도
# 반복문 대신 수식을 이용하였다. A, B, V = map(int, input().split()) days = (V - B) // (A - B) if (V - B) % (A - B) > 0: # if문을 이용하여 나머지의 올림을 구현하였다. days += 1 print(days)
성공!
해결한 방법
반복문은 시간복잡도가 높아 문제를 해결할 수 없었다.
그래서 수식을 이용하였다.
달팽이가 밤에 미끄러지지 않는다면 매우 간단한 수식이다.
예) 달팽이가 밤에 미끄러지지 않을 경우, 하루 이동 거리 2미터, 정상 6미터 라면,
6 / 2 = 3
따라서 3일 걸린다.하지만 이 문제에서 달팽이는 밤에 미끄러진다.
그래서 수식이 다소 복잡해 진다.
예) 달팽이가 밤에 미끄러지는 경우, 낮에 이동 거리 2미터, 밤에 미끄러 지는 거리 1미터, 정상 6미터 라면,
6 - 1 / 2 - 1 = 5
따라서 5일 걸린다.위 수식을 코드에 적용하면,
days = (V - B) // (A - B) # 몫은 정상에 도달한 일수 if (V - B) % (A - B) > 0: # 나머지가 존재한다면 1일을 추가 days += 1
if문 대신에 파이썬의 math.ceil을 이용해 나머지를 올림 처리, 제출해 보았다.
제출 결과 처리 시간은 거의 비슷했으나, 메모리는 if문 적용시 더 적게 사용했다.
# if문 대신 math.ceil을 이용해 나머지 올림 처리 import math A, B, V = map(int, input().split()) days = math.ceil((V - B) / (A - B)) print(days)
728x90반응형'CS > 코딩 테스트' 카테고리의 다른 글
[알고리즘][파이썬] 백준_2447번_별 찍기 - 10 (0) 2021.11.26 [알고리즘][파이썬] 백준_10870번_피보나치 수 5 (0) 2021.11.25 [알고리즘][파이썬] 백준_10872번_팩토리얼 (0) 2021.11.24 [알고리즘][파이썬] 백준_10250번_ACM 호텔 (0) 2021.11.23 [알고리즘][파이썬] 백준_1193번_분수찾기 (0) 2021.11.18 다음글이 없습니다.이전글이 없습니다.댓글