๐Ÿ’ซ ETC/Problem Solving

[SWEA] 1206. [S/W ๋ฌธ์ œํ•ด๊ฒฐ ๊ธฐ๋ณธ] 1์ผ์ฐจ - View (๊ตฌํ˜„)

ming412 2023. 11. 15. 17:19

โœ๏ธ ๋ฌธ์ œ ์š”์•ฝ

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=3&contestProbId=AV134DPqAA8CFAYh&categoryId=AV134DPqAA8CFAYh&categoryType=CODE

 

SW Expert Academy

SW ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—ญ๋Ÿ‰ ๊ฐ•ํ™”์— ๋„์›€์ด ๋˜๋Š” ๋‹ค์–‘ํ•œ ํ•™์Šต ์ปจํ…์ธ ๋ฅผ ํ™•์ธํ•˜์„ธ์š”!

swexpertacademy.com

 

์™ผ์ชฝ ์กฐ๋ง๊ณผ ์˜ค๋ฅธ์ชฝ ์กฐ๋ง ๋ชจ๋‘ 2์นธ ์ด์ƒ ํ™•๋ณด๋˜์—ˆ์„ ๋•Œ ์กฐ๋ง๊ถŒ์ด ํ™•๋ณด๋˜์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค.

์กฐ๋ง๊ถŒ์ด ํ™•๋ณด๋œ ์„ธ๋Œ€์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ผ.

๐Ÿ’ช ๋ฌด์‹ํ•˜๊ฒŒ ํ’€๊ธฐ

2์ฐจ์› ๋ฆฌ์ŠคํŠธ(`board`)์— ๊ฐ ์„ธ๋Œ€๋ฅผ 1๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์œ„ ์‚ฌ์ง„๊ณผ ๊ฐ™์€ ์˜ˆ์‹œ๋ผ๋ฉด, ์•„๋ž˜์ฒ˜๋Ÿผ ํ‘œ์‹œ๋œ๋‹ค. (๊ฐ•๋ฌผ์ด ์ฒœ์žฅ ๋ฐฉํ–ฅ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.)

 

๊ทธ๋ฆฌ๊ณ  ๊ฐ ์„ธ๋Œ€๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ์–‘ ์˜† 2 ์นธ์ด ๋น„์–ด์žˆ๋‹ค๋ฉด(=0 ์ด๋ผ๋ฉด) `cnt += 1`์„ ํ•œ๋‹ค.

import sys
sys.stdin = open("input.txt", "r")
sys.stdout = open("output.txt", "w")

if __name__ == '__main__':
    TC = 10
    MAX_HEIGHT = 255 # ์ตœ๋Œ€ ๊ฑด๋ฌผ ๋†’์ด
    for test_case in range(1, TC + 1):
        N = int(input()) # ๊ฑด๋ฌผ์˜ ์ˆ˜
        board = [[0] * N for _ in range(MAX_HEIGHT)]
        height = list(map(int, input().split()))

        # board init
        for i in range(2,N-2): # ์—ด (์ฒ˜์Œ๊ณผ ๋งˆ์ง€๋ง‰ 0 ๋‘ ๊ฐœ ๋บ€ ์ƒํƒœ์—์„œ ์ˆœํšŒ)
            for j in range(height[i]): # ํ–‰
                board[j][i] = 1 # ์—ด์€ ๊ณ ์ •, ํ–‰ ๋ฐ˜๋ณต๋ฌธ

        cnt = 0
        for i in range(2,N-2): # ์—ด (์ฒ˜์Œ๊ณผ ๋งˆ์ง€๋ง‰ 0 ๋‘ ๊ฐœ ๋บ€ ์ƒํƒœ์—์„œ ์ˆœํšŒ)
            for j in range(height[i]): # ํ–‰
                if board[j][i-1] == 0 and board[j][i-2] == 0 and board[j][i+1] == 0 and board[j][i+2] == 0: # ์กฐ๋ง๊ถŒ ๋ณด์žฅ
                    cnt += 1

        print('#{} {}'.format(test_case, cnt))

 

โœจ ์šฐ์•„ํ•˜๊ฒŒ ํ’€๊ธฐ

๊ฑด๋ฌผ์„ ์ˆœํšŒํ•˜๋ฉด์„œ, ํ•ด๋‹น ๊ฑด๋ฌผ(`height[i]`)์˜ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ๊ฐ๊ฐ 2๊ฐœ์˜ ๊ฑด๋ฌผ ๋†’์ด๋ฅผ ๋น„๊ตํ•˜๋Š” ํ’€์ด์ด๋‹ค.

 

1. (ํ•ด๋‹น ๊ฑด๋ฌผ์„ ์ œ์™ธํ•˜๊ณ ) ์™ผ์ชฝ 2๊ฐœ์˜ ๊ฑด๋ฌผ๊ณผ ์˜ค๋ฅธ์ชฝ 2๊ฐœ์˜ ๊ฑด๋ฌผ ์ค‘ ์ตœ๋Œ€ ๋†’์ด(`mx`)๋ฅผ ๊ตฌํ•œ๋‹ค.

    1-1. 1๋ฒˆ์—์„œ ๊ตฌํ•œ ์ตœ๋Œ“๊ฐ’(`mx`)์ด ํ•ด๋‹น ๊ฑด๋ฌผ์˜ ๋†’์ด(`height[i]`)๋ณด๋‹ค ํฌ๋ฉด, ๊ทธ ๊ฑด๋ฌผ ์ „์ฒด์— ์กฐ๋ง๊ถŒ์ด ๋ณด์žฅ๋œ ์„ธ๋Œ€๊ฐ€ ์—†๋Š” ๊ฒƒ์ด๋‹ค.

    1-2. 1๋ฒˆ์—์„œ ๊ตฌํ•œ ์ตœ๋Œ“๊ฐ’(`mx`)๋ณด๋‹ค ํ•ด๋‹น ๊ฑด๋ฌผ์˜ ๋†’์ด(`height[i]`)๊ฐ€ ํฌ๋ฉด, ๊ทธ ๊ฑด๋ฌผ์˜ ์ผ๋ถ€ ์„ธ๋Œ€๋Š” ์กฐ๋ง๊ถŒ์ด ๋ณด์žฅ๋œ๋‹ค.

2. 1-2์˜ ๊ฒฝ์šฐ, ์กฐ๋ง๊ถŒ์ด ๋ณด์žฅ๋œ ์„ธ๋Œ€์˜ ์ˆ˜๋Š” `height[i]-mx`์ด๋‹ค. ์ด๋ฅผ ๋ˆ„์ ํ•˜์—ฌ ์ตœ์ข… ๋‹ต์„ ๊ตฌํ•œ๋‹ค.

import sys
sys.stdin = open("input.txt", "r")
sys.stdout = open("output.txt", "w")

if __name__ == '__main__':
    TC = 1
    for test_case in range(1, TC + 1):
        N = int(input())
        height = list(map(int, input().split()))
        
        cnt = 0
        for i in range(2, N - 2): # ์ฒ˜์Œ๊ณผ ๋งˆ์ง€๋ง‰ 0 ๋‘ ๊ฐœ ๋บ€ ์ƒํƒœ์—์„œ ์ˆœํšŒ
            mx = max(height[i - 2], height[i - 1], height[i + 1], height[i + 2])
            if height[i] > mx: # ์กฐ๋ง๋œ ๋ณด์žฅ๋œ ์„ธ๋Œ€๊ฐ€ ์กด์žฌ
                cnt += (height[i] - mx)

        print("#{} {}".format(test_case, cnt))