1. 문제 링크
2869번: 달팽이는 올라가고 싶다
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
www.acmicpc.net
2. 문제 및 입출력예제
3. 문제 풀이
처음에는 반복문을 이용해서 A만큼 더하고, V가 넘었는지 확인하고, B만큼 뺐다.
그러나 시간초과라는 결과가 나왔다.
0.15초의 시간 제한이 있어서 반복 횟수가 늘어날수록 시간이 늘어났을 것이다.
반복문을 빼고 풀 방법을 생각하다 식으로 풀자고 생각했다.
마지막날 올라간 상태에서 끝이 난다는 가정하에
올라가야 하는 길이는 V-B / 하루동안 올라가는 길이인 A-B로 생각했다.
V-B로 계산했다 나머지가 발생한 경우는 A-B보다 작은 길이가 남았다는 것으로
하루를 더하면 된다.
4. 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String str = br.readLine();
String[] ing = str.split(" ");
int[] num = new int[3];
for(int i=0;i<3;i++) {
num[i] = Integer.parseInt(ing[i]);
}
//(num[2]-num[1]): 전체 길이에서 마지막날 올라갔을 때 도착하는 경우에서
//(num[0]-num[1]): 하루동안 올라간 길이 를 나눈다.
int day = (num[2]-num[1]) / (num[0]-num[1]);
if((num[2]-num[1]) % (num[0]-num[1]) != 0){ //나머지가 있으면 더 올라가야 함
day++;
}
sb.append(day);
System.out.println(sb);
}
}
'ALGORITHM' 카테고리의 다른 글
백준 1546 평균 (Java) (0) | 2023.01.18 |
---|---|
백준 3052 나머지 (Java) (0) | 2023.01.17 |
백준 1181 단어 정렬 (Java) (0) | 2023.01.15 |
백준 10828 스택 (Java) (0) | 2023.01.14 |
백준 2309 일곱 난쟁이 (Java) (0) | 2023.01.13 |