https://www.acmicpc.net/problem/2869
2869번: 달팽이는 올라가고 싶다
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
www.acmicpc.net
문제 이름이 나의 심금을 울리는 F같은 면모를 보였지만, 아쉽게도 나는 T다.
(개쓸데없는 tmi..)
첨봤을때 그냥 while문써서 하면 되것지 라고 생각하고
import java.util.*;
import java.util.stream.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int A = sc.nextInt();
int B = sc.nextInt();
int V = sc.nextInt();
while(true) {
if (V-A <= 0) {
cnt++;
break;
} else {
V = V - A + B;
cnt++;
}
}
System.out.println(cnt);
}
}
이렇게 짜고, 예시를 넣었는데, #3 예시가 결과값이 이클립스 내에서도 상당히 늦게나옴.
문제 조건보니까 시간을 엄청 짧게 잡았길래, 일케 풀면 무조건 시간초과나겠구나 싶어서 다른 방법을 생각해봄.
import java.util.*;
import java.util.stream.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int A = sc.nextInt();
int B = sc.nextInt();
int V = sc.nextInt();
int cnt = 1;
V = V-A;
int oneDay = A-B;
cnt += V/oneDay;
if(V % oneDay != 0 ) {
cnt++;
}
System.out.println(cnt);
}
}
마지막에 A만큼 어차피 올라가서 종료될거니까 이걸 먼저 생각해줌
-> cnt를 1부터 잡고, V는 A만큼 빼줌
V-A를 하루에 올라갈 수 있는 길이인 A-B로 나눠주면, 그 몫만큼 cnt에 추가함
만약 나머지가 있는 경우 cnt에 1추가해서 출력하면,
while문 사용안하고 더 빨리 출력할 수 있음
728x90
'백준이당' 카테고리의 다른 글
[JAVA] 백준 9012 : 괄호 (1) | 2023.06.14 |
---|---|
[JAVA] 백준 1010 : 다리놓기 (0) | 2023.06.14 |
[JAVA] 백준 1978번 : 소수찾기 (0) | 2023.06.02 |
[JAVA] 백준 1037: 약수 (0) | 2023.05.31 |
[JAVA] 백준 1009 : 분산처리 (0) | 2023.05.31 |