백준 2869:달팽이 문제:파이썬

태훈입니다·2022년 12월 16일
0

코테 풀이

목록 보기
33/34


정답 전 코드:

풀이 :

우선 A,B,V를 각각 입력받고,
구하려는 날 days 의 초기값을 0, 현재 달팽이의 위치 Position도 0으로
설정했다.
그 뒤 while 반복문을 통해 days 를 1씩 늘렸는데,
이 때 달팽이의 포지션에 낮에 올라가는 이동거리 A를 더하고,
이 위치가 오르려는 V보다 작을 때 B만큼을 빼주는 과정을 반복하였고,
만약 달팽이의 위치가 V와 같거나 커질 때, 그 즉시 반복문을 빠져나와
days를 출력하게 만들었다.
이 코드도 정답을 얻을 순 있지만, 정답이 아니었다.
우선 이 코드를 사용 시, 큰 숫자가 들어갈 경우 너무 많은 처리과정이 필요하기에
문제에서 요구하는 시간 내에 '절대' 코드가 돌아가지 않았다..

정답 코드:

코드 풀이:

우선 무수히 많은 시행 착오를 겪었다.
결국 문제에서 원하는 건, 컴퓨터에게 복잡한 알고리즘을 주기 전에,
내가 내 능력으로 이 문제를 간소화해서, 최소한의 작업을 시키는 걸 원하는 거다.
이 문제를 푸는 과정에서, 수학 공부를 더 해서
조금 더 성능 좋은 프로그래밍을 하기 위해선 내 능력도 중요하다는 걸 깨달았다.

1 2 3 4 => Day

2 2 2 2 => A

2 3 4 5 => V
-1 -1 -1 => B

1 2 3 => 현재 위치.

	내가 만든 표다. A,B,V의 상관 관계를 알기 위해, 예제 코드인
    A,B,V = 2,1,5 를 대입해서, Day 를 구해보았는데,
    결국 V = (Day * A) - ((Day -1)*B) 라는 식을 얻을 수 있었다.
    
    
    나를 포함, 많은 사람들이 Day = V/(A-B) 공식으로
    문제에 접근을 하는데, 이 경우엔 문제에서 말한 것 처럼
    낮에 V에 도착 시,  그 날 밤엔 떨어지지 않는다, 라는 가정에
    오류가 생기기에, 위 표에서 처럼 결국 도착 날 (Day)는
    
    
    
    문제에서 구하고자 하는 건 Day 기 때문에, 
    Day = (V - B) / (A - B) 라는 식을 얻을 수 있었고 
    이 식을 이용해 Day 를 출력하면 소수점 까지 반환 한
    수를 얻을 수 있다. (예를 들어 2,1,5를 입력 시 4.0 반환) 
    이 때, 두 가지 조건을 통해서 답을 얻어 내야 정답을 맞출 수 있는데,
    1. 만약 Day 의 값이 1.4 처럼 나오는 경우
    2. Day의 값이 1.0 처럼 딱 떨어지게 나오는 경우.
    
    이 경우를 가정해서, 1번의 경우 2가 출력되도록 int(day) + 1을 해줬고
    1.0 처럼 딱 떨어질 경우엔 그대로 int(day)가 출력 되게 해서,
    낮에 V까지 올라갔는데, 밤에 B만큼 떨어져서 day가 추가 되는 일을 방지했다.
    
    많은 깨달음을 준 문제지만..
    그만큼 많은 시간이 소요됐다.
    

    
profile
개발 공부를 하고 있는 비전공자입니다!

0개의 댓글