코딩문제풀이/Baekjoon

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

코딩하는 포메라니안 2021. 3. 1. 16:09

1. 문제

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

 

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

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

www.acmicpc.net

 

 

 

2. 풀이 과정

*Key : 마지막 단계에는 정상에 올라가면 내려올 필요가 없다. 시간제한 주의

 

1) 마지막 단계 전까지 날짜를 계산한다. 

day = (top-plus)/pminus;//pminus는 (올라가는 거리)-(미끄러지는 거리)

2) 마지막 단계 전까지 올라간 거리를 계산한다.

top-day*pminus

3) 남은 거리가 올라갈 거리보다 크면 +2일, 작으면 +1일을 한다.

 

 

[전체 코드]

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

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		int plus, pminus, top;
		int day;
		
		StringTokenizer st = new StringTokenizer(br.readLine());
		plus = Integer.parseInt(st.nextToken());
		pminus = plus-Integer.parseInt(st.nextToken());
		top = Integer.parseInt(st.nextToken());
		
		day = (top-plus)/pminus;
		
		if(top-day*pminus>plus)
			System.out.print(day+2);
		else
			System.out.print(day+1);
		
		
	}
}

 

 

3. 관련 함수 정리 - BufferedReader, BufferedWriter

 

1) 사용하는 이유 : 속도가 빠름

 

2) BufferedReader : 버퍼를 이용한 입력

  •  String으로 입력 받아서 가공 필요
  •  readLine할 때마다 예외처리
import java.io.BufferedReader;
import java.io.IOException;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		
		//String형으로 받아오기
		String s = bf.readLine();

		//Int형으로 받아오기
		int n = Integer.parseInt(bf.readLine());
        
		//Int형 여러 개 받아오기
		String Tokenizer st = new StringTokenizer(s);
		int n1 = Integer.parseInt(st.nextToken());
		int n2 = Integer.parseInt(st.nextToken());
    }
}

 

3) BufferedWriter : 버퍼를 이용한 출력

import java.io.BufferedWriter;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        String s = "test";
        
        bw.write(s+"\n"); // 출력하기
        bw.flush(); // 버퍼에 남아있는 값 모두 출력 = 비우기
        bw.close(); // 모두 출력하고 stream 닫기
    }
}