-
[백준 2869번] 달팽이는 올라가고 싶다 (java)알고리즘 문제 풀기 2021. 4. 19. 15:51
링크 : https://www.acmicpc.net/problem/2869
나의 풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) {
BufferedReader bf = new BufferedReader( new InputStreamReader(System.in));
String s = " ";
try {
s = bf.readLine();
} catch (IOException e) {
System.out.println(e);
}
StringTokenizer st = new StringTokenizer(s);
int A = Integer.parseInt( st.nextToken() );
int B = Integer.parseInt( st.nextToken() );
int V = Integer.parseInt( st.nextToken() );
// 수학식을 정리해보자
// V = (A-B)(day - 1) + A
// A-B만큼 day 하루 전에 오르고, A를 마지막 날에 오르면 V가 됨
// 위 식을 정리하면 아래와 같이 된다
// A*day - A - B*day + B + A = V
// Day(A-B) + B = V
// Day(A - B) = V - B
// Day = (V - B) / (A - B)
// 단, (V - B) % (A - B)의 나머지가 없을 때임. (나누어 떨어질 때..)
// 남은 거리가 있다면 +1
int day = (V - B) / (A - B);
day += (((V - B) % (A - B)) > 0) ? 1 : 0;
System.out.println(day);
}
}위의 주석 부분에 적혀있듯, V = 으로 시작하는 수학식을 통해 계산했다. 처음엔 단순 반복문으로 처리하여 시간초과로 떨어졌으나, 친구가 노트에 적어서 해보라는 조언으로 처리했다.
내가 생각한 모범 답안
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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());
int day = (v-b-1)/(a-b)+1;
System.out.println(day);
}
}(v-b-1)을 통해 나머지를 날려버렸다. 이 과정을 통해 별도로 나머지가 남았는지 생각할 필요가 없다.
이 생각까지 못했는데, 이 코드를 보고 깨달았다..
실행 결과
- 나의 코드 : 124 ms
- 모범 답안 : 124 ms
'알고리즘 문제 풀기' 카테고리의 다른 글
[프로그래머스 60057] 문자열 압축 (java) (0) 2021.04.21 [프로그래머스 12899] 124 나라의 숫자 (java) (0) 2021.04.20 [백준 2775번] 부녀회장이 될테야 (java) (0) 2021.04.16 [백준 10250번] ACM 호텔 (java) (0) 2021.04.16 [백준 1193번] 분수찾기 (java) (0) 2021.04.15