본문 바로가기
공부하자/알고리즘

[백준] 2869번 달팽이는 올라가고 싶다 C, java

by snbrin 2022. 1. 19.

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

 

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

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

www.acmicpc.net

 

C

#include <stdio.h>

int main() {

	int a, b, v;
	int ab = 0;	//올라가야할 나머지 길이
	int count = 0;

	scanf("%d %d %d", &a, &b, &v);

	count = (v - b - 1) / (a - b) + 1;
	
	printf("%d", count);

	return 0;
}

달팽이가 미끄러지기 전에 정상에 도착하는 경우가 있으니 v-b미터만 올라가면 목표에 달성한다. 따라서 총 v-b미터를 매일 a-b미터씩 올라간다. 만약에 v-b가 a-b로 정확히 나누어 떨어지면 그 몫이 정답. 정확히 나누어 떨어지지 않고 나머지가 남는다면 나머지만큼 다음날 더 올라가야 하므로 몫에 1을 더해야한다. 위의 코드에서는 언제 나누어떨어지는지 구분하지 않고 무조건 -1후에 +1 처리하여 계산한다.

 

java

package javastd1;

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

public class bj2869 {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub

		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 count = (v-b-1) / (a-b) +1;
		
		System.out.println(count);
		
		
	}

}

자바도 c와 같은 알고리즘으로 해결.