코테/백준

[백준/JAVA] 2869번: 달팽이는 올라가고 싶다

imname1am 2023. 6. 29. 01:07
반응형

🔺 문제

 

2869번: 달팽이는 올라가고 싶다

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

www.acmicpc.net

 

 

🔺 코드

📍 틀림

- 이유 : 시간 초과

더보기

반복문을 사용하면 시간 초과로 틀리는 문제라고 한다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.util.*;
import java.io.*;
 
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        
        long A = Long.parseLong(st.nextToken());    // +
        long B = Long.parseLong(st.nextToken());    // -
        long V = Long.parseLong(st.nextToken());    // 목표 높이
        
        long height = 0;
        long day = 0;
        
        // 반복문 X (시간 초과)
        while(true) {
            height += A;
            day++;
            
            if(height >= V) {
                System.out.println(day);
                break;
            }
            
            height -= B;
        }
    }
}
 
cs
 

 

 

📍  정답 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.*;
import java.io.*;
 
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        
        long up   = Long.parseLong(st.nextToken());
        long down = Long.parseLong(st.nextToken());
        long goal = Long.parseLong(st.nextToken());
        
        long day = (goal - down) / (up - down);
        
        // 🔔 잔여 블럭이 있는 경우, 하루 더 소요됨 🔔
        if((goal - down) % (up - down) != 0) {
            day++;
        }
        
        System.out.println(day);
    }
}
 
cs
✅ 해결 아이디어
✔ 수학....🤦‍♀️🤦‍♀️
📍 걸리는 날 수 = 올라가야 할 높이 / 하루 동안 올라간 높이
  - 올라가야 할 높이 = 목표 높이 - 미끄러진 길이
  - 하루 동안 올라간 높이 = 올라간 길이 - 미끄러진 길이

📍 Line 16,17 : up-down의 차이 값보다 작은 나머지가 존재한다면, 다음 날 up 때 올라가야하므로 + 1

 

💥 유의사항

• 정점에 도달하지 않으면 미끄러지지 않는다.

  ⇨ 잔여블록이 있는 경우, 문제 발생 💦

  ⇨ up-down의 차이 값보다 작은 나머지가 존재한다면, 다음날 up 때 올라가야 함. ⬆

 

 


🔺 다른 풀이들

- 줄글로 설명 진짜 잘하시는 거 같다... 👍👍👍 (복습용)

 

[Java] 백준 2869번 [달팽이는 올라가고 싶다] 자바

[Java] 백준 2869번 [달팽이는 올라가고 싶다] 자바

velog.io

 


💬 느낀 점

브론즈인데.. 왜 정답률이 낮을꼬.. 하니

반복문 썼다가 시간초과가 개빡세서 틀린 ... 이런 이유가..🤦‍♀️💦

 

 

1회독 2회독 3회독 4회독 5회독
V        

(참고)

✔ 최고의 풀이와 설명.. 복습용으로 봐야디...

 

[백준] 2869번 : 달팽이는 올라가고 싶다 - JAVA [자바]

https://www.acmicpc.net/problem/2869 2869번: 달팽이는 올라가고 싶다 문제 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. 달팽이는 낮에 A미터 올라갈 수 있다. 하지만,

st-lab.tistory.com

 

- 주석 참고...

 

[JAVA / 자바] 백준 2869번 - 달팽이는 올라가고 싶다

문제 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. 달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간

kwin0825.tistory.com

 

반응형