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

공부함

알고리즘 문제 풀이 - 백준 #2869번: 달팽이는 올라가고 싶다 (JAVA) 본문

알고리즘/백준

알고리즘 문제 풀이 - 백준 #2869번: 달팽이는 올라가고 싶다 (JAVA)

bassy 2022. 2. 22. 21:12

 

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

 

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

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

www.acmicpc.net

 

문제 이해 못하는 사람은 없을거라 생각하고..

 

while문으로 count 할때마다 거리 더하고 거리 빼고.. 이렇게 하면 무조건 시간초과가 걸린다.

한가지 수식으로 풀어야 한다.

또 한가지 수식으로만 풀어도 시간초과가 날 수 있다.

그럴땐 입출력 문을 Scanner가 아닌 BufferReader 를 이용해야한다.

BufferReader가 Scanner보다 실행시간이 빠르기 때문.

 

내가 StringBuffer 사용이 미숙해서 애 먹은 문제. 

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;


public class snail_2869 {
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
	
		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 count =0;
		count=(V-B)/(A-B);
		if(((V-B)%(A-B)!=0) || ((V-B)/(A-B)==0)) {
			count+=1;
		}

		System.out.print(count);
	}
}

 

느낀점: 간단한 수학 문제도 약간 시간이 걸린다. 그리고 꼼꼼하게 풀지 않아서 한마디로 설명해 보라 하면 잘 못하겠다.

StringBuffer 개념을 완벽하게 이해하도록 공부하자. 

 

자바의 정석 String 클래스 영상 부터~

https://www.youtube.com/watch?v=PG8kPjwWbWU&list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp&index=106