Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
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
Tags more
Archives
Today
Total
관리 메뉴

luke

[백준] - 달팽이는 올라가고 싶다 (2869) (Java/자바) 본문

알고리즘문제/백준 문제(Java)

[백준] - 달팽이는 올라가고 싶다 (2869) (Java/자바)

luke-king 2025. 4. 17. 14:08

문제 : https://www.acmicpc.net/problem/2869

 

 

 

 

 

문제.


 

 

 

 

 

 

 

 

풀이.


 

 

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(), " ");
		int a = Integer.parseInt(st.nextToken());
		int b = Integer.parseInt(st.nextToken());
		int v = Integer.parseInt(st.nextToken());
		
		int day = (v - b - 1) / (a - b) + 1;
		System.out.println(day);
		
		
	}

}

 

오늘 문제는 백준 2869번 "달팽이는 올라가고 싶다" 문제다.

취업을 하게 돼서 바빠서 알고리즘 풀 시간이 없었지만 하루에 한 문제는 아니더라도 꾸준히 다시 글을 올리려고 한다. 

(바쁘다는 건 핑계 같지만....)

문제에서 중요한건 처리 속도였다. 일반 Scanner를 사용했을 때 최적화 된 알고리즘이 아니면 계속해서 "시간초과"가 나온다...

암튼! 바로 문제 풀이 해보겠다.

 

1. 일반 Scanner 보다 처리 속도가 빠른 BufferedReader 를 사용한다.

 

2. 입력값이 3개이므로 하나씩 잘라 주기 위해 StringTokenizer를 사용한다.

 

3. 각 변수들을 형변환을 통해 int형으로 변환 해준다.

 

4. 중요한  계산식인데 

  • v - b (마지막 날 전까지 도달해야 할 높이)
  • a - b (낮에 올라가고 밤에 미끄러진 이동량)
  • (v - b) / (a - b) (필요한 일 수) 나누어 떨어지지 않는다면 반올림이 필요하다.
  • (v - b - 1) / (a - b) + 1 (분모에서 1을 빼서 올림 구현)

이다.