본문 바로가기
Algorithm/Problem

캠핑(BJ_4796)

by 당진개발자 2024. 8. 27.

1. 문제 링크

https://www.acmicpc.net/problem/4796

 


 

2. 나의 코드

메모리: 18040 kb
시간: 256 ms
코드 길이: 755 B
시간 복잡도 : O(1)
설명
- 그리디
- 사칙연산
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BJ_4796 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st =  null;
        int idx = 1;

        while (true) {

            st = new StringTokenizer(br.readLine());
            int l = Integer.parseInt(st.nextToken());
            int p = Integer.parseInt(st.nextToken());
            int v = Integer.parseInt(st.nextToken());

            if (l == 0 && p == 0 && v == 0) break;

            System.out.printf("Case %d: %d\n", idx++, ((v / p) * l) + Math.min((v % p), l));
        }
    }
}

 


 

3. 정답 코드

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int i = 1;
        while (true) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int l = Integer.parseInt(st.nextToken());
            int p = Integer.parseInt(st.nextToken());
            int v = Integer.parseInt(st.nextToken());
            if (l == 0 && p == 0 && v == 0) break;
            int total = l * (v / p) + Math.min(l, v % p);
            sb.append("Case " + i + ": " + total + "\n");
            i++;
        }
        System.out.print(sb);
    }
}

 


 

4. 배운 점

- l, p, v 의 제한은 int형 모두 이다. 그래서 O(n)도 시간이 초과된다.
- 그렇기에 무조건 O(1)의 시간복잡도를 사용해야 한다.

- 쉽다고 무시하지 말자. 항상 반례는 존재한다. Math.min((v % p), l)

'Algorithm > Problem' 카테고리의 다른 글

케빈 베이컨의 6단계 법칙 (BJ_1389)  (0) 2024.09.06
치킨 배달(BJ_15686)  (0) 2024.08.29
외계인의 기타 연주(BJ_2841)  (0) 2024.08.26
좋다 (BJ_G4_1253)  (0) 2024.08.07
구간 합 구하기4(BJ_S3_11659)  (0) 2024.08.06