ALGORITHM πŸ€–/Baekjoon

λ°±μ€€ - 1459

daxx0ne 2023. 4. 26. 14:58

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

 

1459번: 걷기

μ„Έμ€€μ΄λŠ” ν•™κ΅μ—μ„œ μ§‘μœΌλ‘œ κ°€λ €κ³  ν•œλ‹€. λ„μ‹œμ˜ ν¬κΈ°λŠ” λ¬΄ν•œλŒ€μ΄κ³ , λ„μ‹œμ˜ μ„Έλ‘œ λ„λ‘œλŠ” λͺ¨λ“  μ •μˆ˜ xμ’Œν‘œλ§ˆλ‹€ 있고, κ°€λ‘œ λ„λ‘œλŠ” λͺ¨λ“  μ •μˆ˜ yμ’Œν‘œλ§ˆλ‹€ μžˆλ‹€. μ„Έμ€€μ΄λŠ” ν˜„μž¬ (0, 0)에 μžˆλ‹€. 그리고 (

www.acmicpc.net

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long x = sc.nextLong(); // μ§‘μ˜ μœ„μΉ˜ xμ’Œν‘œ
        long y = sc.nextLong(); // μ§‘μ˜ μœ„μΉ˜ yμ’Œν‘œ
        long w = sc.nextLong(); // κ±Έμ–΄μ„œ ν•œ 블둝 κ°€λŠ”λ° κ±Έλ¦¬λŠ” μ‹œκ°„ (평행 이동)
        long s = sc.nextLong(); // λŒ€κ°μ„ μœΌλ‘œ ν•œ 블둝을 κ°€λ‘œμ§€λ₯΄λŠ” μ‹œκ°„

        long case1 = (x + y) * w; // case1: 평행 μ΄λ™λ§Œ ν•΄μ„œ κ°€λŠ” 경우
        long case2; // case2: λŒ€κ°μ„ μœΌλ‘œ κ°€λŠ” 경우
        if((x + y) % 2 != 0) { // (x + y)κ°€ ν™€μˆ˜μΌ λ•Œ -> λ‘˜ 쀑 큰 μˆ˜μ—μ„œ 1 λΉΌμ€€ 만큼 λŒ€κ°μ„ μœΌλ‘œ κ°€κ³ , 평행 이동은 ν•œλ²ˆ
            case2 = (Math.max(x, y) - 1) * s + w;
        }
        else { // (x + y)κ°€ 짝수일 λ•Œ -> λ‘˜ 쀑 큰 수만큼 λŒ€κ°μ„ μœΌλ‘œ 감
            case2 = Math.max(x, y) * s;
        }
        long case3 = (Math.min(x, y) * s) + (Math.abs(x - y) * w); // case3: λŒ€κ°μ„  + 평행 이동 λ‘˜λ‹€ ν•΄μ„œ κ°€λŠ” 경우
        // x, y κ°’ 쀑 μž‘μ€ κ°’ 만큼만 λŒ€κ°μ„ μœΌλ‘œ, λ‚˜λ¨Έμ§€(μ ˆλŒ€κ°’)만큼 평행 이동

        long min = Math.min(Math.min(case1, case2), case3); // caseλ“€ 쀑 κ°€μž₯ μž‘μ€ μˆ˜κ°€ μ΅œμ†Œ μ‹œκ°„

        System.out.println(min);
    }
}