🧩 Algorithm/[BOJ] Bronze

BOJ 5532 : λ°©ν•™ μˆ™μ œ (Java/κ΅¬ν˜„/Bronze 4)

devCloud 2024. 10. 10. 16:05
728x90

[문제 링크] πŸ‘‰ https://www.acmicpc.net/problem/5532


μ„€λͺ…

방학은 총 L일이닀. μˆ˜ν•™μ€ 총 BνŽ˜μ΄μ§€, κ΅­μ–΄λŠ” 총 AνŽ˜μ΄μ§€λ₯Ό ν’€μ–΄μ•Ό ν•œλ‹€. μƒκ·Όμ΄λŠ” ν•˜λ£¨μ— κ΅­μ–΄λ₯Ό μ΅œλŒ€ CνŽ˜μ΄μ§€, μˆ˜ν•™μ„ μ΅œλŒ€ DνŽ˜μ΄μ§€ ν’€ 수 μžˆλ‹€. 상근이가 겨울 λ°©ν•™λ™μ•ˆ μˆ™μ œλ₯Ό ν•˜μ§€ μ•Šκ³  놀 수 μžˆλŠ” μ΅œλŒ€ λ‚ μ˜ 수λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

풀이

ν•˜λ£¨μ— ν’€ 수 μžˆλŠ” 양을 총 νŽ˜μ΄μ§€ 수둜 λ‚˜λˆ μ„œ μ΅œμ†Œν•œ λ©°μΉ κΉŒμ§€ λ‹€ ν’€ 수 μžˆλŠ”μ§€λ₯Ό κ΅¬ν•œλ‹€. 

- κ΅­μ–΄ 총 νŽ˜μ΄μ§€ 수 / κ΅­μ–΄ ν•˜λ£¨ ν• λ‹ΉλŸ‰, μˆ˜ν•™ 총 νŽ˜μ΄μ§€ 수 / μˆ˜ν•™ ν•˜λ£¨ ν• λ‹ΉλŸ‰

λ§Œμ•½μ— κ³„μ‚°ν•œ κ²°κ³Όκ°€ κ΅­μ–΄λŠ” λͺ«μ΄ 4, λ‚˜λ¨Έμ§€κ°€ 1일 λ•Œ, 1νŽ˜μ΄μ§€κ°€ λ‚¨μ•˜μœΌλ―€λ‘œ 4일 + 1일을 ν•΄μ„œ 총 5μΌλ§Œμ— 끝낼 수 있고,

μˆ˜ν•™μ€ λͺ«μ΄ 3, λ‚˜λ¨Έμ§€κ°€ 6일 λ•Œ, 6νŽ˜μ΄μ§€κ°€ λ‚¨μ•˜μœΌλ―€λ‘œ 3일 + 1일을 ν•΄μ„œ 총 4μΌλ§Œμ— 끝낼 수 μžˆλ‹€.

 

ꡭ어와 μˆ˜ν•™ 쀑 더 큰 μΌμˆ˜λŠ” 5일인 ꡭ어이닀. μˆ˜ν•™μ„ λ¨Όμ € 끝내도 κ΅­μ–΄λ₯Ό 아직 μ•ˆ λλƒˆμœΌλ‹ˆ 5일이 λ˜μ–΄μ•Ό μˆ™μ œλ₯Ό λ‹€ ν•  수 μžˆλ‹€. κ·Έλž˜μ„œ Math.max() λ₯Ό μ΄μš©ν•΄ λ‘˜ 쀑에 μ΅œλŒ€κ°’μ„ κ΅¬ν•œλ‹€. 그리고 λ‚˜λ¨Έμ§€κ°€ 있으면 +1을 ν•΄μ€€λ‹€. 

 

μ΅œμ’…μ μœΌλ‘œ, 방학이 총 20일이라고 ν–ˆμ„ λ•Œ μˆ™μ œλ₯Ό ν•œ 5일을 λΉΌλ©΄ 놀 수 μžˆλŠ” 날은 15일이닀.

 

  • Math.max(a, b) : java.lang λΌμ΄λΈŒλŸ¬λ¦¬μ— μ†ν•˜λŠ” λ©”μ„œλ“œ
  • Math.ceil() : μ˜¬λ¦Όν•˜λŠ” λ©”μ„œλ“œ, μ†Œμˆ˜μ  뒀에 1 μ΄μƒμ˜ μˆ«μžκ°€ 있으면 μ˜¬λ¦°λ‹€.

 

 

 

Solution

import java.io.*;

public class Main {
    public static void main(String[]  args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int l = Integer.parseInt(br.readLine());
        int a = Integer.parseInt(br.readLine());
        int b = Integer.parseInt(br.readLine());
        int c = Integer.parseInt(br.readLine());
        int d = Integer.parseInt(br.readLine());

        double max = 0;
        max = Math.max((double)a/(double)c, (double)b / (double)d);
        max = Math.ceil(max); //ceil() 올림 λ©”μ„œλ“œ : μ†Œμˆ˜μ  뒀에 1μ΄μƒμ˜ μˆ«μžκ°€ 있으면 올림
        l -= (int)max;
        System.out.print(l);
    }
}

 

 

πŸ‘©‍πŸ’» 회고

μ‹€νŒ¨ν•œ μ½”λ“œμ΄λ‹€. μ™œ ν‹€λ¦°μ§€ λͺ¨λ₯΄κ² λ‹€. λ‚΄ μ˜ˆμƒμ€ 쑰건이 λ„ˆλ¬΄ ν•œμ •μ μ΄λΌλŠ” 것이닀. μ„œλ‘œμ†Œ 일 λ•Œ? 흠...

        int maxDay = Math.max(a / c, b / d); //큰 일수λ₯Ό ꡬ함
        if (Math.max(a % c, b % d) != 0) { //λ‚˜λ¨Έμ§€κ°€ 있으면 +1일 μΆ”κ°€
            maxDay += 1;
        }
        System.out.println(l - maxDay);

 

λ‚˜μ€‘μ— λ‹€μ‹œ ν’€μ–΄μ•Ό ν•  λ¬Έμ œμ΄λ‹€.

그리고 μ΄λ²ˆμ— μ£Όμ˜ν•΄μ•Ό ν•  점을 μ•Œμ•˜λ‹€. Bufferedλ₯Ό μ‚¬μš©ν•  λ•Œ 항상 Stringν˜•μœΌλ‘œ κ³ μ •λ˜μ–΄ μžˆμœΌλ‹ˆ 좜λ ₯ν•  λ•Œλ„ μ •μˆ˜λŠ” μ •μˆ˜ν˜•μœΌλ‘œ λ³€ν™˜ν•΄μ•Ό ν•œλ‹€λŠ” 점이닀.  

 

πŸ“Œ 주의

bw.write(String.valueOf(l - maxDay));

 

728x90