SMALL
시간초과 난 코드
import java.io.IOException;
import java.util.Scanner;
public class Main {
public static void main (String args[]) throws IOException {
Scanner scan = new Scanner(System.in);
int a = scan.nextInt();
int b = scan.nextInt();
int v = scan.nextInt();
int cur = 0;
int day = 0;
while(true) {
day++;
cur += a;
if(cur >= v) {
break;
}
cur -= b;
}
System.out.println(day);
}
}
반복문으로 일일이 계산했더니 시간초과 오류가 뜬다.
수정한 코드
import java.io.IOException;
import java.util.Scanner;
public class Main {
public static void main (String args[]) throws IOException {
Scanner scan = new Scanner(System.in);
int a = scan.nextInt();
int b = scan.nextInt();
int v = scan.nextInt();
int per = a - b;
int day = ((v - a) / per) + 1;
if((v - a) < a) {
if((v -a) == 0) {
System.out.println(1);
}else {
System.out.println(day + 1);
}
} else {
int temp = day * per;
if (v >= temp) {
System.out.println(day);
} else {
System.out.println(day - 1);
}
}
}
}
논리는 다음과 같다
최종 날짜 day = 1 + (n - 1)번의 올라갔다 내려갔다의 반복
따라서 (v - a) / (a - b)의 형태로 해주고
첫날 올라가고 남은 높이가 올라갈 수 있는 높이보다 큰지 / 작은지를 판별하여 조건문으로 나눴다.
.
.
아직도 반례가 있는것같은데 찾는중.
해결
SMALL
'기록 > 알고리즘' 카테고리의 다른 글
백준 1775번) 부녀회장이 될 테야 (0) | 2020.06.24 |
---|---|
백준 10250번) ACM 호텔 (0) | 2020.06.24 |
백준 11720) 숫자의 합 - substring, charAt, indexOf (0) | 2020.03.08 |
백준 11654) 아스키 코드 (Java) (0) | 2020.03.08 |
백준 11654) 아스키 코드 (Java) (0) | 2020.03.08 |