반응형
문제링크: https://www.acmicpc.net/problem/2869
문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
출력
첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
예제 입력 1 복사
2 1 5
예제 출력 1 복사
4
내 시도
첫 시도(시간초과)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int A = in.nextInt();
int B = in.nextInt();
int V = in.nextInt();
System.out.println(answer(A,B,V));
in.close();
}
public static int answer(int a, int b, int v){
int i = 0;
int height = 0;
while(true){
i++;
height = height + a;
if(height >= v) break;
height = height - b;
}
return i;
}
}
원인분석:
키포인트는 정상에 올라가면 미끄러지지 않는다임.
while문을 쓰지 않기로 결정.
그런데도 시간제한이 걸렸다. 아니 왜?
검색해보니 그냥 스캐너로 입력을 받는게 시간이 걸렸나보다.
BufferedReader와 StringTokenizer 를 사용해 입력값을 처리했더니 되었다.
성공한 코드:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
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());
System.out.println(answer(A,B,V));
}
public static int answer(int a, int b, int v){
int onedayPower = a-b;
int days = (int) Math.ceil((double)(v-a)/onedayPower);
return days+1;
}
}
반응형
'개발삽질 > 잡다한 개발기록' 카테고리의 다른 글
[알고리즘] DFS - 휴가(삼성 SW역량평가 기출문제) (0) | 2022.01.22 |
---|---|
[알고리즘] BFS - 단어변환(프로그래머스) (0) | 2022.01.22 |
[알고리즘] DFS - 네트워크(프로그래머스) (0) | 2022.01.21 |
[알고리즘]Array-소수구하기(에라토스테네스 체) (0) | 2021.12.09 |
문제 복습표 링크 (0) | 2021.12.08 |
댓글