반응형

1. 문제 번호 2869번


 

 

 

2. 문제 풀이 

 

한줄 평가

 - 나한테 있어서는 문제를 저렇게 수학적으로 파악하기가 너무 어렵다. (이런 문제의 규칙성 및 푸는 방법에 대해서 공유해주시면 감사하겠습니다ㅜ) 

 

 

 

문제를 먼저 정확히 파악

 

  • 목적지 전날까지 일수 계산하는 방법과 최종 목적지를 기준으로 일수 계산하는 방법이 있다.
    • 목적지 전날까지 기준 (정상에 도달하기 전까지 걸리는 일수 계산을 목표)
      • 예시 length 10 up 5 down 2
        (높이-up) ÷ (up-down)  (10-5) ÷ (5-2) 로 하면 올림하여 2일
    • 최종 목적지를 기준 (정상에 도달한 후에 내려오는 일수를 계산하는데 사용)
      • 예시 length 10 up 5 down 2
        (높이-down) ÷ (up-down) (10-2) ÷ (5-2) 로 하면 올림하여 3일
         

 

 

 

나의 문제풀이 방식 및 순서

 

 * 다양한 학습이 우선이기 때문에 다양한 방법을 생각 *

 

 

  1. 정상에 오르기 전날까지의 날까지 계산을 한다.
    (v-a) : 달팽이가 정상에 도달하기 전까지 남은 높이
    (a-b) : 하루에 올라가는 높이

    잘 생각해보면 (하루에 올라가는 높이) 를 총 길이가 아니라 v-a로 해줘야 전날까지 남은 일수가 나온다.
  2. 아래의 소스코드를 이해하는데 1시간 이상이 소요됐다..어휴
    이유는 예시 5 2 10을 그려보면 이해가 쉽다.
     int days = (10-5) / (5-2)  => 1이 대입이 된다. (기대 값은 2였는데..)
    그래서 days++를 해준다.

  3. 그리고 마지막에 +1을 해서 마지막 정상까지 올라간다!!!
int days = (v-a) / (a-b);
    if((v - a) % (a-b) != 0){
        days++;
    }
System.out.println(days+1);

 

 

실패 

  1. 아래의 방법으로 풀어보려고 시도함
    (총길이 ÷ (Up -Down) ) : 이유는 하루에 올라갈 수 있는 높이이고 총길이 나누면 몫이 Day 겠지!!?  응 아니야..
    1. 예시 2 1 5
      1. up : 2 down : 1 length : 5 이면   5 ÷ (2-1) = 5 (4일이 소요됌)
    2. 예시 5 1 6
      1. up : 5 down : 1 length : 6 이면   6 ÷ (5-1) = 1 (2일이 소요됌)
    3. 예시 100 99 1000000000
      1. 1000000000 ÷ 1 = 999999901    읭???????
    4. 10 8 2  
      1. 10 ÷ ( 8-7 ) = 10 일은 절때 아니잖아.. ?? 이게 뭐지 ?? 

 

 

 

 

 


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
반응형

+ Recent posts