๐Ÿฅ‡ [Baekjoon / Java] 14719. ๋น—๋ฌผ

์ดํ•˜์–€ยท2024๋…„ 6์›” 5์ผ
0

๐Ÿฃ ๋ฐฑ์ค€

๋ชฉ๋ก ๋ณด๊ธฐ
18/33

๋ฌธ์ œ ์„ค๋ช…


๐Ÿ’ก Info

๋‚ด์šฉ

2์ฐจ์› ์„ธ๊ณ„์— ๋ธ”๋ก์ด ์Œ“์—ฌ์žˆ๋‹ค. ๋น„๊ฐ€ ์˜ค๋ฉด ๋ธ”๋ก ์‚ฌ์ด์— ๋น—๋ฌผ์ด ๊ณ ์ธ๋‹ค.

๋น„๋Š” ์ถฉ๋ถ„ํžˆ ๋งŽ์ด ์˜จ๋‹ค. ๊ณ ์ด๋Š” ๋น—๋ฌผ์˜ ์ด๋Ÿ‰์€ ์–ผ๋งˆ์ผ๊นŒ?

๐Ÿ“ฅ์ž…๋ ฅ ์กฐ๊ฑด

  • ์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” 2์ฐจ์› ์„ธ๊ณ„์˜ ์„ธ๋กœ ๊ธธ์ด H๊ณผ 2์ฐจ์› ์„ธ๊ณ„์˜ ๊ฐ€๋กœ ๊ธธ์ด W๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 โ‰ค H, W โ‰ค 500)
  • ๋‘ ๋ฒˆ์งธ ์ค„์—๋Š” ๋ธ”๋ก์ด ์Œ“์ธ ๋†’์ด๋ฅผ ์˜๋ฏธํ•˜๋Š” 0์ด์ƒ H์ดํ•˜์˜ ์ •์ˆ˜๊ฐ€ 2์ฐจ์› ์„ธ๊ณ„์˜ ๋งจ ์™ผ์ชฝ ์œ„์น˜๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ W๊ฐœ ์ฃผ์–ด์ง„๋‹ค.
  • ๋”ฐ๋ผ์„œ ๋ธ”๋ก ๋‚ด๋ถ€์˜ ๋นˆ ๊ณต๊ฐ„์ด ์ƒ๊ธธ ์ˆ˜ ์—†๋‹ค. ๋˜ 2์ฐจ์› ์„ธ๊ณ„์˜ ๋ฐ”๋‹ฅ์€ ํ•ญ์ƒ ๋ง‰ํ˜€์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์—ฌ๋„ ์ข‹๋‹ค.

๐Ÿ“ค์ถœ๋ ฅ ์กฐ๊ฑด

  • 2์ฐจ์› ์„ธ๊ณ„์—์„œ๋Š” ํ•œ ์นธ์˜ ์šฉ๋Ÿ‰์€ 1์ด๋‹ค. ๊ณ ์ด๋Š” ๋น—๋ฌผ์˜ ์ด๋Ÿ‰์„ ์ถœ๋ ฅํ•˜์—ฌ๋ผ.
  • ๋น—๋ฌผ์ด ์ „ํ˜€ ๊ณ ์ด์ง€ ์•Š์„ ๊ฒฝ์šฐ 0์„ ์ถœ๋ ฅํ•˜์—ฌ๋ผ.

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

  • ์ž…๋ ฅ 1
    4 4
    3 0 1 4
  • ์ถœ๋ ฅ 1
    5
  • ์ž…๋ ฅ 2
    4 8
    3 1 2 3 4 1 1 2
  • ์ถœ๋ ฅ 2
    5
  • ์ž…๋ ฅ 3
    3 5
    0 0 0 2 0
  • ์ถœ๋ ฅ 3
    0


๋ฌธ์ œ ์ดํ•ด


  • ๋†’์ด(์„ธ๋กœ)์ธ H์™€ ๋„ˆ๋น„(๊ฐ€๋กœ)์ธ W๋ฅผ ์ž…๋ ฅ๋ฐ›์•„์„œ, ์ตœ์†Ÿ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š๋„๋ก ์ฑ„์šฐ๊ธฐ!


์•Œ๊ณ ๋ฆฌ์ฆ˜


์‹ค์ œ ํ’€์ด ์‹œ๊ฐ„ : 30๋ถ„

  • ์ž…๋ ฅ
    • ๋†’์ด(์„ธ๋กœ)์ธ H์™€ ๋„ˆ๋น„(๊ฐ€๋กœ)์ธ W๋ฅผ ์ž…๋ ฅ๋ฐ›๊ธฐ
    • ๋ธ”๋ก ๋†’์ด๋“ค์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฐ์—ด ์ž…๋ ฅ๋ฐ›๊ธฐ
  • ๊ณ„์‚ฐ
    • i๋ฅผ ๊ธฐ์ค€์œผ๋กœ i-1์— ์žˆ๋Š” ๊ฐœ์ˆ˜์™€ i+1์— ์žˆ๋Š” ๊ฐœ์ˆ˜๋ฅผ ๋น„๊ต
      • ๊ทธ ์ค‘ ๋” ์ž‘์€ ์ˆ˜์—์„œ i๋ฅผ ๋นผ์„œ ๊ณ„์‚ฐ
      • ๊ทธ๋ ‡๊ฒŒ ์–ป์€ i๋Š” ๋ชจ๋‘ ํ•ฉํ•˜๊ธฐ
  • ์ถœ๋ ฅ
    • i์˜ ํ•ฉ ์ถœ๋ ฅํ•˜๊ธฐ
import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
			
			int H = sc.nextInt();
			int W = sc.nextInt();
			
			int[] arr = new int[W];
			for(int i=0; i<W; i++) {
				arr[i] = sc.nextInt();
			}
			
			int resultOne = 0;
			int resultTwo = 0;
			
			for(int i=1; i<W-1; i++) {
				if(arr[i-1] > arr[i+1]) {
					resultOne = arr[i+1] - arr[i];
				}
				if(arr[i-1] < arr[i+1]) {
					resultTwo = arr[i-1] - arr[i];
				}
			}
			System.out.print(resultOne + resultTwo);
	}
}


์˜ค๋‹ต ์ฒดํฌ


  • ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ๋‚˜์˜ค๋Š” ๋ฌธ์ œ
    • ๋น„๊ต๋ฅผ i๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ทธ ์•ž์˜ i-1, ๊ทธ ๋’ค์˜ i+1 ํ•˜๋˜ ๋ฐฉ์‹์—์„œ
    • โ†’ Math.min์„ ์ด์šฉํ•ด i๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ์— ์žˆ๋Š” ๋†’์ด ์ค‘ ์ตœ๋Œ€ ๋†’์ด์™€, i๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๋†’์ด ์ค‘ ์ตœ๋Œ€ ๋†’์ด๋ฅผ ๋น„๊ตํ•ด์„œ ๋” ์ž‘์€ ๊ฐ’์„ ์ฐพ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ!
  • ๋˜ํ•œ, maxH๋ผ๋Š” ๋ณ„๋„ ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ฐพ๋Š” ๋ถ€๋ถ„์„ ๋ถ„๋ฆฌ!
//before
int resultOne = 0;
			int resultTwo = 0;
			
			for(int i=1; i<W-1; i++) {
				if(arr[i-1] > arr[i+1]) {
					resultOne = arr[i+1] - arr[i];
				}
				if(arr[i-1] < arr[i+1]) {
					resultTwo = arr[i-1] - arr[i];
				}
			}
			System.out.print(resultOne + resultTwo);
		}
	}
//after
			int result = 0;
			
			for(int i = 1; i < W - 1; i++) {
	            int minH = Math.min(maxH(arr, 0, i), maxH(arr, i + 1, W)); //i๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ์— ์žˆ๋Š” ๋†’์ด ์ค‘ ์ตœ๋Œ€ ๋†’์ด | ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๋†’์ด ์ค‘ ์ตœ๋Œ€ ๋†’์ด๋ฅผ ๋น„๊ต -> ๋” ์ž‘์€ ์ˆ˜ ์ฐพ๊ธฐ
	            if(arr[i] < minH) { // ํ˜„์žฌ ์œ„์น˜์˜ ๊ฐ’์ด ์ตœ์†Ÿ๊ฐ’๋ณด๋‹ค ์ž‘์„ ๋•Œ
	                result += minH - arr[i]; // ๋น—๋ฌผ์˜ ์–‘ ๊ณ„์‚ฐํ•˜์—ฌ ๊ฒฐ๊ณผ์— ๋”ํ•จ
	            }
	        }
	        System.out.print(result);
	    }
	    
	    // ์ฃผ์–ด์ง„ ๋ฒ”์œ„์—์„œ ์ตœ๋Œ€ ๋†’์ด๋ฅผ ์ฐพ๋Š” ํ•จ์ˆ˜
	    static int maxH(int[] arr, int start, int end) {
	        int max = 0;
	        for(int i = start; i < end; i++) {
	            max = Math.max(max, arr[i]);
	        }
	        return max;
	    }
	}


์ตœ์ข… ํ’€์ด


์‹ค์ œ ํ’€์ด ์‹œ๊ฐ„ : 46๋ถ„(์ฒซ ํ’€์ด ํฌํ•จ)

  • ์ž…๋ ฅ
    • ๋†’์ด(์„ธ๋กœ)์ธ H์™€ ๋„ˆ๋น„(๊ฐ€๋กœ)์ธ W๋ฅผ ์ž…๋ ฅ๋ฐ›๊ธฐ
    • ๋ธ”๋ก ๋†’์ด๋“ค์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฐ์—ด ์ž…๋ ฅ๋ฐ›๊ธฐ
  • ๊ณ„์‚ฐ
    • i๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ์— ์žˆ๋Š” ๋†’์ด ์ค‘ ์ตœ๋Œ€ ๋†’์ด | ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๋†’์ด ์ค‘ ์ตœ๋Œ€ ๋†’์ด๋ฅผ ๋น„๊ต
      • ๊ทธ ์ค‘ ๋” ์ž‘์€ ์ˆ˜์—์„œ i๋ฅผ ๋นผ์„œ ๊ณ„์‚ฐ
      • ๊ทธ๋ ‡๊ฒŒ ์–ป์€ i๋Š” ๋ชจ๋‘ ํ•ฉํ•˜๊ธฐ
  • ์ถœ๋ ฅ
    • i์˜ ํ•ฉ ์ถœ๋ ฅํ•˜๊ธฐ
import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
			
		int H = sc.nextInt();
		int W = sc.nextInt();
		
		int[] arr = new int[W];
		for(int i=0; i<W; i++) {
			arr[i] = sc.nextInt();
		}
		
		int result = 0;
		
		for(int i = 1; i < W - 1; i++) {
            int minH = Math.min(maxH(arr, 0, i), maxH(arr, i + 1, W)); //i๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ์— ์žˆ๋Š” ๋†’์ด ์ค‘ ์ตœ๋Œ€ ๋†’์ด | ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๋†’์ด ์ค‘ ์ตœ๋Œ€ ๋†’์ด๋ฅผ ๋น„๊ต -> ๋” ์ž‘์€ ์ˆ˜ ์ฐพ๊ธฐ
            if(arr[i] < minH) { // ํ˜„์žฌ ์œ„์น˜์˜ ๊ฐ’์ด ์ตœ์†Ÿ๊ฐ’๋ณด๋‹ค ์ž‘์„ ๋•Œ
                result += minH - arr[i]; // ๋น—๋ฌผ์˜ ์–‘ ๊ณ„์‚ฐํ•˜์—ฌ ๊ฒฐ๊ณผ์— ๋”ํ•จ
            }
        }
        System.out.print(result);
    }
    
    // ์ฃผ์–ด์ง„ ๋ฒ”์œ„์—์„œ ์ตœ๋Œ€ ๋†’์ด๋ฅผ ์ฐพ๋Š” ํ•จ์ˆ˜
    static int maxH(int[] arr, int start, int end) {
        int max = 0;
        for(int i = start; i < end; i++) {
            max = Math.max(max, arr[i]);
        }
        return max;
    }
}

profile
์–ธ์  ๊ฐ€ ๋‚ด ์ฝ”๋“œ๋กœ ์„ธ์ƒ์— ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๋„๋ก, BE&Data Science ๊ฐœ๋ฐœ ๊ธฐ๋ก ๋…ธํŠธโ˜˜๏ธ

0๊ฐœ์˜ ๋Œ“๊ธ€