반응형
1. 문제 번호 2869번
2. 문제 풀이
한줄 평가
- 나한테 있어서는 문제를 저렇게 수학적으로 파악하기가 너무 어렵다. (이런 문제의 규칙성 및 푸는 방법에 대해서 공유해주시면 감사하겠습니다ㅜ)
문제를 먼저 정확히 파악
- 목적지 전날까지 일수 계산하는 방법과 최종 목적지를 기준으로 일수 계산하는 방법이 있다.
- 목적지 전날까지 기준 (정상에 도달하기 전까지 걸리는 일수 계산을 목표)
- 예시 length 10 up 5 down 2
(높이-up) ÷ (up-down) (10-5) ÷ (5-2) 로 하면 올림하여 2일
- 예시 length 10 up 5 down 2
- 최종 목적지를 기준 (정상에 도달한 후에 내려오는 일수를 계산하는데 사용)
- 예시 length 10 up 5 down 2
(높이-down) ÷ (up-down) (10-2) ÷ (5-2) 로 하면 올림하여 3일
- 예시 length 10 up 5 down 2
- 목적지 전날까지 기준 (정상에 도달하기 전까지 걸리는 일수 계산을 목표)
나의 문제풀이 방식 및 순서
* 다양한 학습이 우선이기 때문에 다양한 방법을 생각 *
- 정상에 오르기 전날까지의 날까지 계산을 한다.
(v-a) : 달팽이가 정상에 도달하기 전까지 남은 높이
(a-b) : 하루에 올라가는 높이
잘 생각해보면 (하루에 올라가는 높이) 를 총 길이가 아니라 v-a로 해줘야 전날까지 남은 일수가 나온다. - 아래의 소스코드를 이해하는데 1시간 이상이 소요됐다..어휴
이유는 예시 5 2 10을 그려보면 이해가 쉽다.
int days = (10-5) / (5-2) => 1이 대입이 된다. (기대 값은 2였는데..)
그래서 days++를 해준다. - 그리고 마지막에 +1을 해서 마지막 정상까지 올라간다!!!
int days = (v-a) / (a-b);
if((v - a) % (a-b) != 0){
days++;
}
System.out.println(days+1);
실패
- 아래의 방법으로 풀어보려고 시도함
(총길이 ÷ (Up -Down) ) : 이유는 하루에 올라갈 수 있는 높이이고 총길이 나누면 몫이 Day 겠지!!?응 아니야..- 예시 2 1 5
- up : 2 down : 1 length : 5 이면 5 ÷ (2-1) = 5 (4일이 소요됌)
- 예시 5 1 6
- up : 5 down : 1 length : 6 이면 6 ÷ (5-1) = 1 (2일이 소요됌)
- 예시 100 99 1000000000
- 1000000000 ÷ 1 = 999999901 읭???????
- 1000000000 ÷ 1 = 999999901 읭???????
- 10 8 2
- 10 ÷ ( 8-7 ) = 10 일은 절때 아니잖아.. ?? 이게 뭐지 ??
- 예시 2 1 5
3. 소스 인증
▶ 방법 1
import java.util.*;
import java.lang.*;
import java.io.*;
// The main method must be in a class named "Main".
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());
//(v-a) : 달팽이가 정상에 도달하기 전까지 남은 높이
//(a-b) : 하루에 올라가는 높이
int days = (v-a) / (a-b); // 달팽이가 정상에 오르기 전날까지의 날
if((v - a) % (a-b) != 0) // 달팽이가 하루에 오르는 높이보다 정상까지의 높이가 짧을때
days++;
System.out.println(days+1); // 마지막날 오른 기록은 계산식에 포함되어있지 않으므로 출력에 1일을 더해준다.
}
}
▶ 방법 2
import java.util.*;
import java.lang.*;
import java.io.*;
// The main method must be in a class named "Main".
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()," ");
long up = Long.parseLong(st.nextToken());
long down = Long.parseLong(st.nextToken());
long length = Long.parseLong(st.nextToken());
long day = up-down;
long goal = length-down; //최종목적지
if(goal%day == 0){
System.out.print( (goal/day) ); //낮에 도착
} else {
System.out.print( (goal/day) + 1 ); //하루를 더 가야한다.
}
}
}
- 실패 소스코드 -
4. 추가 개념
5. 참조 블로그
불편함을 느끼실 경우 연락 주시면 곧 바로 삭제하도록 하겠습니다.
728x90
반응형
'알고리즘(BOJ) 문제풀이' 카테고리의 다른 글
[BOJ/백준] 약수, 배수와 소수_ 2501번 (0) | 2024.06.01 |
---|---|
[BOJ/백준] 약수, 배수와 소수_ 5086번 (0) | 2024.05.31 |
[BOJ/백준] 일반수학1_ 2292번 몇번 풀어보기 (0) | 2024.05.24 |
[BOJ/백준] 일반수학1_ 2903번 (0) | 2024.05.23 |
[BOJ/백준] 일반수학1_ 2720번 (0) | 2024.05.23 |