๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ Python/solve-algorithm

๋ธŒ๋ฃจํŠธํฌ์Šค(Brute-force search) : ๋ฐฑ์ค€ 14719 [๋น—๋ฌผ] & ํŒŒ์ด์ฌ

๋ธŒ๋ฃจํŠธํฌ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ณต๋ถ€ํ•˜๋ฉด์„œ, ๋ฐฑ์ค€ ๋ฌธ์ œ์—๋„ ์ ์šฉ์„ ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค! ๐Ÿ‘€ ๋ฐ˜๋ณต ์ˆ™๋‹ฌ์„ ํ†ตํ•ด ๋”์šฑ ์ต์ˆ™ํ•ด์ง€์ž! ๐Ÿ†

์ฐธ๊ณ ๋กœ ํ•ด๋‹น ๋ฌธ์ œ๋Š” leet_code์—์„œ๋„ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ฌธ์ œ๋„ ์—…๋ฐ์ดํŠธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ฃผ์†Œ๋Š” ์ œ์ผ ์•„๋ž˜ reference์— ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ” Brute-force search

  • ๊ทธ๋Œ€๋กœ ํ•ด์„ํ•˜๋ฉด "๋ฌด์ฐจ๋ณ„ ๋Œ€์ž… ๊ฒ€์ƒ‰"
  • ์˜๋ฏธ ๊ทธ๋Œ€๋กœ, ๋ฌด์ฐจ๋ณ„์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์‹œ๋„ํ•ด ๋ณด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ๊ฐ€์žฅ ์ˆœ์ง„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ ‘๊ทผ๋ฒ•
  • ์˜ˆ๋ฅผ ๋“ค์–ด, ๋น„๋ฐ€๋ฒˆํ˜ธ 4์ž๋ฆฌ ์ž๋ฌผ์‡ ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜๋ฉด, 0000๋ถ€ํ„ฐ 9999๊นŒ์ง€ ์ „์ฒด๋ฅผ ๋‹ค ํ™•์ธํ•˜๋Š” ๊ฒƒ!

์ด๋ฏธ์ง€ ์ถœ์ฒ˜๋Š” ์•„๋ž˜์—

์ด๋ฏธ์ง€๋Š” ์—ฌ๊ธฐ์—์„œ ๊ฐ€์ง€๊ณ  ์™”์Šต๋‹ˆ๋‹ค.

๐Ÿ‘ ์žฅ์ 

  • ์ง๊ด€์ ์ด๊ณ  ๋ช…ํ™•ํ•˜๋‹ค
  • ๋‹ต์„ ํ™•์‹คํ•˜๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค

๐Ÿ˜ต‍๐Ÿ’ซ  ๋‹จ์ 

  • ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๋ณด๊ธฐ ๋•Œ๋ฌธ์— ๋น„ํšจ์œจ์ ์ž„ โžก๏ธ ์ธํ’‹์ด ์ปค์งˆ์ˆ˜๋ก ๋น„ํšจ์œจ์˜ ๋Œ“๊ฐ€๊ฐ€ ์ปค์ง„๋‹ค!!!! ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ

โžก๏ธ ๋น„ํšจ์œจ์ ์ธ๋ฐ ์™œ ์•Œ์•„์•ผํ•˜์ง€โ“ ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ฐพ๊ธฐ ์œ„ํ•œ ๊ณ ๋ฏผ์˜ ์ถœ๋ฐœ์ ์ด ๋ฐ”๋กœ Brute Force! ๊ทธ๋ž˜์„œ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค!๐Ÿ‘€


๋ฐฑ์ค€ 14719 [๋น—๋ฌผ]

 

๐Ÿ“Ž Problem

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

 

14719๋ฒˆ: ๋น—๋ฌผ

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

www.acmicpc.net


๐Ÿ“Ž Submission Code

H, W = map(int, input().split())
buildings = list(map(int, input().split()))

def trapping_rain(buildings):
    # ์ด ๋‹ด๊ธฐ๋Š” ๋น—๋ฌผ์˜ ์–‘์„ ๋ณ€์ˆ˜์— ์ €์žฅ
    total_height = 0

    # ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ ์ธ๋ฑ์Šค์„ ๋Œ๋ฉด์„œ ํ•ด๋‹น ์นธ์— ๋‹ด๊ธฐ๋Š” ๋น—๋ฌผ์˜ ์–‘์„ ๊ตฌํ•œ๋‹ค
    # 0๋ฒˆ ์ธ๋ฑ์Šค์™€ ์ œ์ผ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๋Š” ๋นผ๊ณ  ๋ฐ˜๋ณต๋ฌธ์„ ๋ˆ๋‹ค
    for i in range(1, len(buildings) - 1):
        # ๋ฌผ์ด ์•ˆ์ฐจ๊ธฐ๋•Œ๋ฌธ์— ํ˜„์žฌ ์ธ๋ฑ์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์–‘์ชฝ์— ๊ฐ€์žฅ ๋†’์€ ๊ฑด๋ฌผ์˜ ์œ„์น˜๋ฅผ ๊ตฌํ•œ๋‹ค
        max_left = max(buildings[:i]) #  ํ˜„์žฌ ์ธ๋ฑ์Šค์˜ ์™ผ์ชฝ์—์„œ ๊ฐ€์žฅ ๋†’์€ ๊ฑด๋ฌผ์˜ ๋†’์ด
        max_right = max(buildings[i:]) # ํ˜„์žฌ ์ธ๋ฑ์Šค์˜ ์˜ค๋ฅธ์ชฝ์—์„œ ๊ฐ€์žฅ ๋†’์€ ๊ฑด๋ฌผ์˜ ๋†’์ด

        # ํ˜„์žฌ ์ธ๋ฑ์Šค์— ๋น—๋ฌผ์ด ๋‹ด๊ธธ ์ˆ˜ ์žˆ๋Š” ๋†’์ด : ๊ทธ ์ค‘ ๋” ๋‚ฎ์€ ๊ฑด๋ฌผ์˜ ๋†’์ด
        upper_bound = min(max_left, max_right)

        # ํ˜„์žฌ ์ธ๋ฑ์Šค์— ๋‹ด๊ธฐ๋Š” ๋น—๋ฌผ์˜ ์–‘์„ ๊ณ„์‚ฐ
        # ์ƒํ•œ ๋†’์ด์—์„œ ํ˜„์žฌ ์ธ๋ฑ์Šค์— ์žˆ๋Š” ๊ฑด๋ฌผ์˜ ๋†’์ด๋ฅผ ๋นผ์„œ ๋ฌผ์˜ ๋†’์ด๋ฅผ ๊ตฌํ•˜๊ณ  total์— ๋”ํ•ด์ค€๋‹ค
        # ๋งŒ์•ฝ upper_bound๊ฐ€ ํ˜„์žฌ ์ธ๋ฑ์Šค ๊ฑด๋ฌผ๋ณด๋‹ค ๋†’์ง€ ์•Š๋‹ค๋ฉด, ํ˜„์žฌ ์ธ๋ฑ์Šค์— ๋‹ด๊ธฐ๋Š” ๋น—๋ฌผ์€ 0
        total_height += max(0, upper_bound - buildings[i])

    return total_height

print(trapping_rain(buildings))

๐Ÿ“Ž Reference