Algorithm Problem/Python

[python] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๊ณต ์ด๋™ ์‹œ๋ฎฌ๋ ˆ์ด์…˜(์›”๊ฐ„ ์ฝ”๋“œ ์ฑŒ๋ฆฐ์ง€ ์‹œ์ฆŒ3)

deo2kim 2022. 2. 15. 21:41
๋ฐ˜์‘ํ˜•

๐Ÿค”๋ฌธ์ œ ํ•ด๊ฒฐ

์ฟผ๋ฆฌ๋Š” ๊ฑฐ๊พธ๋กœ ์‹œ์ž‘

๋์ด๋ฉด ๋Š˜๋ฆฌ๊ณ 

๋์ด ์•„๋‹ˆ๋ฉด ์ด๋™

์‹œ์ž‘ ์‹œ ๋ฒ”์œ„

๋ช…๋ น: ์œ„๋กœ ํ•œ์นธ (์•„๋ž˜์— ์žˆ์–ด์•ผ ์œ„๋กœ ์™”์„ ๋•Œ ๋ณ„์— ๋„์ฐฉํ•  ์ˆ˜ ์žˆ๋‹ค or ์ œ์ž๋ฆฌ์—ฌ๋„ ์œ„๋กœ ํ•œ์นธ์ด๋ฉด ์–ด์งœํ”ผ ๋์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„์— ๋„์ฐฉํ•  ์ˆ˜ ์žˆ๋‹ค)

์•„๋ž˜๋กœ ํ•œ์นธ ๋Š˜๋ ค์คŒ

๋ช…๋ น: ์™ผ์ชฝ์œผ๋กœ ํ•œ์นธ (์˜ค๋ฅธ์ชฝ์— ์žˆ์–ด์•ผ ์™ผ์ชฝ์œผ๋กœ ์™”์„ ๋•Œ ๋ณ„์— ๋„์ฐฉํ•  ์ˆ˜ ์žˆ๋‹ค.)

์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™

๋ช…๋ น: ์œ„๋กœ ์„ธ์นธ (์•„๋ž˜์ชฝ์— ์žˆ์–ด์•ผ ์œ„๋กœ... ๊ทธ๋Ÿฌ๋‚˜ ๋์ด๊ธฐ ๋•Œ๋ฌธ์— ๋Š˜๋ฆด ์ˆ˜ ์—†๋‹ค.)

๊ทธ๋Œ€๋กœ

๋ช…๋ น: ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ์นธ(์™ผ์ชฝ์— ์žˆ์–ด์•ผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์™”์„ ๋•Œ ๋ณ„์— ๋„์ฐฉ๊ฐ€๋Šฅ

์™ผ์ชฝ์œผ๋กœ ์ด๋™

๋ช…๋ น: ์œ„๋กœ ๋‘์นธ ( ์•„๊นŒ ์œ„๋กœ์„ธ์นธ์ธ ๊ฒฝ์šฐ๋ž‘ ๊ฐ™์Œ ) 

๊ทธ๋Œ€๋กœ

๋ช…๋ น: ์•„๋ž˜๋กœ ํ•œ์นธ

๊ทธ๋Œ€๋กœ

answer = (x_max - x_min + 1) * (y_max - y_min + 1)

 

 

๐Ÿ’จ ์ค‘๊ฐ„์— ๋ฒ”์œ„๋ฅผ ์•„์˜ˆ ๋ฒ—์–ด๋‚˜์„œ ๊ฒฐ๊ณผ๊ฐ€ 0์ธ ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

๐Ÿ’ป์†Œ์Šค ์ฝ”๋“œ

def solution(n, m, x, y, queries):
    answer = 0
    x_min, x_max, y_min, y_max = x, x, y, y

    for idx in range(len(queries) - 1, -1, -1):
        direc, dist = queries[idx]
        if direc == 0:  # ์ขŒ(์˜ค๋ฅธ์ชฝ์—์„œ ์™”์Œ)
            y_max += dist  # ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋Š˜๋ฆฌ๊ธฐ
            if y_max > m - 1: # ๋ฒ”์œ„ ๋ฒ—์–ด๋‚˜๋ฉด
                y_max = m - 1  # ๋๊ฐ’์œผ๋กœ
            if y_min != 0:  # ์™ผ์ชฝ ๊ฐ’์ด ๋์ด ์•„๋‹ˆ๋ฉด ๋ฒ”์œ„ ์ถ•์†Œ
                y_min += dist

        elif direc == 1:  # ์šฐ(์™ผ์ชฝ์—์„œ ์™”์Œ)
            y_min -= dist
            if y_min < 0:
                y_min = 0
            if y_max != m - 1:
                y_max -= dist

        elif direc == 2:  # ์ƒ(์•„๋ž˜์„œ ์™”์Œ)
            x_max += dist
            if x_max > n - 1:
                x_max = n - 1
            if x_min != 0:
                x_min += dist

        else:  # ํ•˜(์œ„์—์„œ ์™”์Œ)
            x_min -= dist
            if x_min < 0:
                x_min = 0
            if x_max != n - 1:
                x_max -= dist
        if y_min > m - 1 or y_max < 0 or x_min > n - 1 or x_max < 0:
            return answer
    else:
         answer = (y_max - y_min + 1) * (x_max - x_min + 1)
    return answer

 

๐Ÿ“•๋ฌธ์ œ ํ™•์ธ

์ถœ์ฒ˜: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

๋งํฌ: ๊ณต ์ด๋™ ์‹œ๋ฎฌ๋ ˆ์ด์…˜

๋ฐ˜์‘ํ˜•