달팽이는 올라가고 싶다 성공출처다국어분류
시간 제한 |
메모리 제한 |
제출 |
정답 |
맞은 사람 |
정답 비율 |
0.15 초 (추가 시간 없음) |
128 MB |
63369 |
15185 |
12859 |
26.076% |
https://www.acmicpc.net/problem/2869
문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
출력
첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
알고리즘 분류
백준 알고리즘 # 2869번 : 달팽이는 올라가고 싶다
조건 연산자(삼항 연산자)
- 조건에 따라 서로 다른 수식 수행 / if(?), else(:)
# 조건 수식 ? 수식1 : 수식2;
→ ‘조건 수식’이 참(true, 1)이면 ‘수식1’ 수행, 거짓(false, 0)이면 ‘수식2’ 수행
# 시간초과한 코드
a, b, v = map(int, input().split())
day = 0
while 1:
if a - b == v:
print(day)
break
a += 2
b += 1
day += 1
# 통과한 코드
a, b, v = map(int, input().split())
day = (v - b) / (a - b) // # (a * day) - (b * (day - 1)) >= v
print(int(day) if day == int(day) else int(day) + 1)
풀이 1 (시간초과)
위 코드 주석에 적힌 것처럼 처음 풀이한 코드는 시간초과가 떳다.. 그래도 풀이를 해보자면
달팽이가 낮에 올라가는 변수를 a, 밤에 자는 동안 미끄러지는 변수를 b
나무 막대의 정상 높이의 변수를 v로 설정하고 각각 정수로 입력받았다.
그리고 얼마 걸렸는지 셀 day 변수를 0으로 초기화 시켜놓으면 준비완료🙌
다음으로 while문으로 break가 나오기 전까지 반복을 해주고(아마 여기서 오래 걸려서 시간초과가 뜬 것 같다)
하루가 지날 때마다 변수 a는 2를 증가시키고, 변수 b는 1을 증가시켜서 이것을 뺀 수치가 5가 되었을 때
day를 출력해주면 시간초과한 코드 풀이 끝!
풀이 2 (통과)
이제 다음으로 시간초과가 나지 않은 코드를 보면 (헤매다가 결국 구글링한 결과😂)
시간초과한 코드와 마찬가지로 a, b, v 변수를 설정해서 각각 입력받고
day를 주석에 나온 것처럼 낮이 되서 a가 위로 정상에 올라갔을 때는 미끄러지지 않으니
b쪽에만 day - 1해준 것을 day만 빼고 다 넘겨서 정리하면
day = (v - b) / (a - b)
위와 같은 부등식이 된다.
이것을 파이썬식 삼항연산자를 이용해서 if에 해당하는 day == int(day)일 경우에
int(day)를 출력하면 4가 출려되면서 풀이 끄--읏!👏
(위와 같이 삼항연산자를 이용하지 않고, 그냥 바로 int(day)를 출력할 경우 틀린다.)
자세한 코드가 궁금하신 분들은 아래 GitHub 참고해주세요🙏
최종 소스코드
'코딩테스트 > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 | 2775 : 부녀회장이 될테야 (Python / 파이썬) (0) | 2020.09.23 |
---|---|
백준 알고리즘 | 10250 : ACM 호텔 (Python / 파이썬) (0) | 2020.09.22 |
백준 알고리즘 | 1193 : 분수찾기 (Python / 파이썬) (0) | 2020.09.22 |
백준 알고리즘 | 2292 : 벌집 (Python / 파이썬) (0) | 2020.09.21 |
백준 알고리즘 | 1316 : 그룹 단어 체커 (Python / 파이썬) (0) | 2020.09.21 |
댓글