ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준 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

Designed by Tistory.