[python] ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ•ด๊ฒฐ ์ „๋žต 1๊ถŒ :: ๊ฒŒ์ž„ํŒ ๋ฎ๊ธฐ (p159) ๋ฌธ์ œ

6.5 ๋ฌธ์ œ : ๊ฒŒ์ž„ํŒ ๋ฎ๊ธฐ (๋ฌธ์ œ ID: BOARDCOVER, ๋‚œ์ด๋„: ํ•˜)

๋ฌธ์ œ

H X W ํฌ๊ธฐ์˜ ๊ฒŒ์ž„ํŒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒŒ์ž„ํŒ์€ ๊ฒ€์€ ์นธ๊ณผ ํฐ ์นธ์œผ๋กœ ๊ตฌ์„ฑ๋œ ๊ฒฉ์ž ๋ชจ์–‘์„ ํ•˜๊ณ  ์žˆ๋Š”๋ฐ ์ด ์ค‘ ๋ชจ๋“  ํฐ ์นธ์„ ์„ธ ์นธ์งœ๋ฆฌ L์ž ๋ชจ์–‘์˜ ๋ธ”๋ก์œผ๋กœ ๋ฎ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ๋ธ”๋ก๋“ค์€ ์ž์œ ๋กญ๊ฒŒ ํšŒ์ „ํ•ด์„œ ๋†“์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ์„œ๋กœ ๊ฒน์น˜๊ฑฐ๋‚˜, ๊ฒ€์€ ์นธ์„ ๋ฎ๊ฑฐ๋‚˜, ๊ฒŒ์ž„ํŒ ๋ฐ–์œผ๋กœ ๋‚˜๊ฐ€์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๊ทธ๋ฆผ์€ ํ•œ ๊ฒŒ์ž„ํŒ๊ณผ ์ด๋ฅผ ๋ฎ๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๊ฒŒ์ž„ํŒ์ด ์ฃผ์–ด์งˆ ๋•Œ ์ด๋ฅผ ๋ฎ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์„ธ์š”.

์‹œ๊ฐ„ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ

ํ”„๋กœ๊ทธ๋žจ์€ 2์ดˆ ์•ˆ์— ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋ฉฐ, 64MB ์ดํ•˜์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค.

์ž…๋ ฅ

์ž…๋ ฅ์˜ ์ฒซ ์ค„์—๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ˆ˜ C(C<=30)๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ ์ค„์—๋Š” ๋‘ ๊ฐœ์˜ ์ •์ˆ˜ H,W(1<=H,W<=20)๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ๋‹ค์Œ H ์ค„์— ๊ฐ W ๊ธ€์ž๋กœ ๊ฒŒ์ž„ํŒ์˜ ๋ชจ์–‘์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. #์€ ๊ฒ€์€ ์นธ, .์€ ํฐ ์นธ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ž…๋ ฅ์— ์ฃผ์–ด์ง€๋Š” ๊ฒŒ์ž„ํŒ์— ์žˆ๋Š” ํฐ ์นธ์˜ ์ˆ˜๋Š” 50์„ ๋„˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ถœ๋ ฅ

ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ํฐ ์นธ์„ ๋ชจ๋‘ ๋ฎ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๋‚˜์˜ ๋‹ต

import sys
import copy

try:
    c=int(input()) # testcase
    h_w=input()
    blank = int()

    for index in range(0,len(h_w)):
        if h_w[index]==" ":
            blank = index

    h = int(h_w[:blank])
    w = int(h_w[blank+1:])

    row = list()
    for i in range(0,h):
        row.append(input())

    array = list()
    white_sum = int(0)
    net=int(0)

    for i in range(0,h):
        array.append(list())
        for j in range(0,w):
            array[i].append(row[i][j])
            if row[i][j]==".":
                white_sum+=1

    if c>30 or h<1 or h>20 or w<1 or w>20 or white_sum>50:
        raise Exception("range error")

except:
    print("input sys error")
    sys.exit()


def findL(place,tmp_array,map,L):
    tmp_array.append(place)
    if len(tmp_array)==3:
        tmp = copy.deepcopy(tmp_array)
        L.append(tmp)
        tmp_array.pop()
        return

    direction = [[0,1],[1,0],[-1,0],[0,-1]]

    for dir in direction: # ์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ
        tmp=[]
        for i in range(0,2):
            tmp.append(dir[i]+place[i])
        if tmp[0]>=0 and tmp[0]<h and tmp[1]>=0 and tmp[1]<w and not(tmp in tmp_array) and map[tmp[0]][tmp[1]]==".":
            if len(tmp_array)==2:
                x1 = tmp_array[0][0]
                y1 = tmp_array[0][1]
                x2 = tmp_array[1][0]
                y2 = tmp_array[1][1]
                if (x1==x2 and x2==tmp[0]) or (y1==y2 and y2==tmp[1]) or (x1!=x2!=tmp[0]) or (y1!=y2!=tmp[1]): # L๋ชจ์–‘์ธ์ง€ ์ฒดํฌ
                    continue
            findL(tmp,tmp_array,map,L)
    tmp_array.pop()

def findL_two(place,map,L):

    direction = [[0,1],[1,0],[0,-1],[-1,0]]
    for index in range(0,len(direction)):
        x1 = direction[index][0]+place[0]
        y1 = direction[index][1]+place[1]

        if index==3:
            x2 = direction[0][0]+place[0]
            y2 = direction[0][1]+place[1]
        else:
            x2 = direction[index+1][0]+place[0]
            y2 = direction[index+1][1]+place[1]

        if x1>=0 and x1<=h and y1>=0 and y1<=w and x2>=0 and x2<=h and y2>=0 and y2<=w and map[x1][y1]=="." and map[x2][y2]==".":
            array = list()
            array.append(place)
            array.append([x1,y1])
            array.append([x2,y2])
            L.append(array)

def completeMap(map):
    first_white = list()
    global net 
    global white_sum

    tmp = True
    for j in range(0,h):
        for i in range(0,w):
            if map[j][i]==".":
                tmp = False
                first_white.append(j)
                first_white.append(i)
                break
        if not(tmp):
            break

    L = list()
    array = list()
    print(first_white)
    findL(first_white,array,map,L)
    findL_two(first_white,map,L)
    print(L)

    if not(len(L)):
        return 0

    for l_obj in L:
        for lxy in l_obj:
            map[lxy[0]][lxy[1]]="*"
            white_sum-=1
        print(white_sum)
        print("map1")
        for tmp in map:
            print(tmp)
        if not(white_sum):
            for lxy in l_obj:
                map[lxy[0]][lxy[1]]="."
                white_sum+=1
            return 1
        else:
            done = int(completeMap(map))
            net += done
            done = 0
        for lxy in l_obj:
            map[lxy[0]][lxy[1]]="."
            white_sum+=1
        print(white_sum)
        print("map2")
        for tmp in map:
            print(tmp)
        print("net",net)
    return 0

if not(white_sum%3):
    completeMap(array)
    print("net", net)
else: # ์ฃผ์–ด์ง„ ํฐ์นธ์ด 3์˜ ๋ฐฐ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ฉด fail
    print(0)
    sys.exit()
์„ค๋ช…

โ€‹ completeMap ํ•จ์ˆ˜๋Š” ์šฐ์„  map์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ๊ฐ€์žฅ ์ฒ˜์Œ ๋ฐœ๊ฒฌ๋œ ํฐ ์นธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ํ•ด๋‹น ์นธ์„ ์ง€๋‚˜๋Š” L๋ชจ์–‘์„ ์ฐพ๋Š”๋‹ค. L๋ชจ์–‘ ์ฐพ๊ธฐ๋Š” ํ•จ์ˆ˜ 2๊ฐœ๋กœ ๊ตฌํ˜„ํ•˜์˜€์œผ๋ฉฐ, ์ฒซ๋ฒˆ์งธ ํ•จ์ˆ˜๋Š” ํ•ด๋‹น ์นธ์—์„œ ์‹œ์ž‘๋˜๋Š” L๋ชจ์–‘์ด๊ณ  ๋‘๋ฒˆ์งธ ํ•จ์ˆ˜๋Š” ํ•ด๋‹น ์นธ์„ ๊ฐ€์šด๋ฐ๋กœ ํ•˜๋Š” L๋ชจ์–‘์ด๋‹ค.

 

์™ผ์ชฝ๊ณผ ๊ฐ™์€ map์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์‹œ์ž‘ ์œ„์น˜๋Š” ๊ฐ€์žฅ ๋จผ์ € ๋ฐœ๊ฒฌ๋œ ์™ผ์ชฝ ์ƒ๋‹จ์˜ ์นธ์ด๊ณ , ํ•ด๋‹น ์นธ์„ ํฌํ•จํ•˜๋Š” L๋ชจ์–‘์„ findL, findL_two ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ชจ๋‘ ์ฐพ์œผ๋ฉด ๋‹ค์Œ ์„ธ๊ฐ€์ง€๊ฐ€ ๋‚˜์˜จ๋‹ค.

์ฐพ์€ L๋ชจ์–‘ 3๊ฐ€์ง€๋ฅผ for๋ฌธ์„ ํ†ตํ•ด ์ฐจ๋ก€๋กœ ํ•˜๋‚˜์”ฉ map์— ์ฑ„์šฐ๋ฉด์„œ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด completeMap์— ๋ฐ”๋€ map์„ ๋„˜๊ธด๋‹ค.

 

์™ผ์ชฝ๊ณผ ๊ฐ™์€ ๋ฐ”๋€ map์—์„œ ์‹œ์ž‘ ์œ„์น˜๋ฅผ ์žก๊ณ  ๋ฐฉ๊ธˆ ์ „๊ณผ ๊ฐ™์ด L๋ชจ์–‘์„ ๋ชจ๋‘ ์ฐพ์•„ ๋‹ค์‹œ for๋ฌธ์„ ๋Œ๋ฉด์„œ ํ•˜๋‚˜์”ฉ ๋„ฃ๋Š”๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ map์ด ๋‚˜์˜ค๋Š”๋ฐ, ํ•œ๋ฒˆ ๋” ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋„˜๊ธฐ๊ฒŒ ๋˜๋ฉด ํ•ด๋‹น ์œ„์น˜์—์„œ์˜ L๋ชจ์–‘์„ ์ฐพ์„ ์ˆ˜ ์—†๊ณ , ๊ทธ๋ ‡๋‹ค๋ฉด ์‹คํŒจ๋กœ 0๊ฐ’์„ return ํ•œ๋‹ค.

0์„ return ๋ฐ›๊ณ  map์—์„œ ์ฑ„์› ๋˜ ๋ถ€๋ถ„์„ ์‚ญ์ œํ•œ ํ›„, 2๋ฒˆ์งธ ๊ทธ๋ฆผ์—์„œ์˜ for๋ฌธ์„ ๊ณ„์† ์ง„ํ–‰ํ•˜์—ฌ ๋‹ค๋ฅธ L ๋ชจ์–‘์„ ๋„ฃ๋Š”๋‹ค.

์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ณ„์† ์ง„ํ–‰ํ•˜๋‹ค๊ฐ€ map์ด ์™„์ „ํžˆ ์ฑ„์›Œ์ง€๋Š” ๋•Œ์— ์ „์—ญ๋ณ€์ˆ˜ net์„ 1 ์ฆ๊ฐ€ ์‹œํ‚จ๋‹ค.

๋ฌธ์ œ์ 

์™„์ „ ํƒ์ƒ‰์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งœ๋ณด์•˜๋Š”๋ฐ, ์ƒ๊ฐ๋ณด๋‹ค ์ฝ”๋“œ ์งœ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ค์› ๋‹ค. ์•„์ง ์žฌ๊ท€ํ•จ์ˆ˜์—์„œ return ํ•˜๋Š” ๋ถ€๋ถ„์ด๋‚˜ ์ „์—ญ ๋ณ€์ˆ˜์— ๊ฐ’์„ ๋”ํ•˜๋Š” ๋ถ€๋ถ„์„ ์ œ๋Œ€๋กœ ๊นจ๋‹ซ์ง€ ๋ชปํ•œ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์„ค๊ณ„๋ฅผ ๋Œ€์ถฉํ•˜๊ณ  ์‹œ์ž‘ํ•˜๋‹ค๋ณด๋‹ˆ ๊ตฌํ˜„ ์‹œ ๊ณ ์ณ์•ผ ํ•  ์‚ฌํ•ญ๋“ค์ด ๋งŽ์•„์„œ ๋””๋ฒ„๊น…ํ•ด๋ณด๋ฉด์„œ ๊ณ ์น˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•˜๊ฒŒ ๋˜์–ด ํ‘ธ๋Š”๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋‹ค.

๋˜ํ•œ ์™„์ „ ํƒ์ƒ‰์ด๋‹ค ๋ณด๋‹ˆ ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ๋งŽ์ด ๊ฑธ๋ ค 1514์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋‚˜์˜ค๋Š” ๋งˆ์ง€๋ง‰ ์˜ˆ์ œ์˜ ๊ฒฝ์šฐ 10๋ถ„ ๋™์•ˆ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ€๋™์‹œ์ผœ์•ผ ๋‹ต์ด ๋‚˜์™”๋‹ค. ๋‹ต์€ ์ •ํ™•ํžˆ ๋‚˜์™”์ง€๋งŒ ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ ค ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„

์ตœ์•…์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋ฉด ํ•œ ์นธ์— ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” L๋ชจ์–‘์€ ์ตœ๋Œ€ 12๊ฐœ์ด๋‹ค. map์—์„œ ๋ฒ—์–ด๋‚˜๊ฑฐ๋‚˜ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์œผ๋‹ˆ ๊ฐ€์žฅ์ž๋ฆฌ๋ฅผ ์ œ์™ธํ•œ ๊ฐ€์šด๋ฐ์˜ ํฐ ์นธ์—์„œ๋งŒ ์ง„ํ–‰ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด, ํฐ ์นธ์ด ์ตœ๋Œ€ 50์นธ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ 88 map์ผ๋•Œ ์ตœ๋Œ€ 42์นธ ์ •๋„๋กœ ๊ณ„์‚ฐํ•˜๋ฉด ๋œ๋‹ค. testcase๋Š” ์ตœ๋Œ€ 50๋ฒˆ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, 12^(42)*50 ์ด ์ตœ์•…์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๋˜๋ฉฐ, ๋„ˆ๋ฌด ํฌ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ

Partition of a set of 140556 objects. Total size = 10300278 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 45997 33 3304049 32 3304049 32 str
1 34808 25 1467312 14 4771361 46 tuple
2 17281 12 1026153 10 5797514 56 bytes
3 8667 6 730096 7 6527610 63 types.CodeType
4 1395 1 670536 7 7198146 70 type
5 8044 6 579168 6 7777314 76 function
6 2115 2 505916 5 8283230 80 dict (no owner)
7 1395 1 405012 4 8688242 84 dict of type
8 361 0 291624 3 8979866 87 dict of module
9 367 0 150860 1 9130726 89 set
<381 more rows. Type e.g. '_.more' to view.>

 

testcase 3๊ฐœ๋Š” ๋„ˆ๋ฌด ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ ค์„œ (๋งˆ์ง€๋ง‰ testcase๊ฐ€) 2๋ฒˆ์งธ ๊ฒƒ๋งŒ ๋Œ๋ ค๋ดฃ๋Š”๋ฐ 10GB ์ •๋„์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค. ๋งˆ์ง€๋ง‰ testcase๋Š” ํ›จ์”ฌ ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.

์ฃผ์–ด์ง„ ๋‹ต๊ณผ ๋‹ค๋ฅธ ์ 

โ€‹ ์™ผ์ชฝ ์œ„๋ถ€ํ„ฐ๋กœ ์ˆœ์„œ๋ฅผ ๊ฐ•์ œํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ๊ฐ™์•˜์œผ๋‚˜, ๋ณธ์ธ์€ ํ˜„์žฌ ์นธ์„ ํฌํ•จํ•˜๋Š” L๋ชจ์–‘์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ƒ๊ฐํ–ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•œ ์นธ ๋‹น 12๊ฐœ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค. ์‹ฌ์ง€์–ด ์ฒ˜์Œ์—๋Š” findL(8๊ฐœ), findL_two(4๊ฐœ) ๋‘๊ฐœ์˜ ํ•จ์ˆ˜๋กœ ๋‚˜๋ˆ„์–ด์„œ ๊ตฌํ–ˆ๋Š”๋ฐ, ์ž˜๋ชป๋จ์„ ๊นจ๋‹ซ๊ณ  ๊ณ ์น˜๊ธดํ–ˆ๋‹ค.

โ€‹ ๊ณ ์นœ ์ฝ”๋“œ๋Š” direction์—์„œ ์• ์ดˆ์— ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„(*์ด๊ฑฐ๋‚˜ map์—์„œ ๋ฒ—์–ด๋‚˜๊ฑฐ๋‚˜)๋“ค์„ ์ง€์šฐ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•˜์˜€์œผ๋‚˜, ์ด์ „ ์ฝ”๋“œ์™€ ๋น„์Šทํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ƒˆ๋‹ค.

โ€‹ ์ฃผ์–ด์ง„ ๋‹ต์—์„œ๋Š” ์™ผ์ชฝ ์œ„๋ถ€ํ„ฐ๋ผ๋Š” ์ˆœ์„œ๋ฅผ ๊ฐ•์ œํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ 4๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜๋งŒ ๋‚˜์˜จ๋‹ค๊ณ  ์„ค๋ช…ํ•˜๊ณ  ์žˆ๋‹ค.

์›๋ž˜๋Š” ์ค‘๊ฐ„ ์นธ์„ ์ƒ๊ฐํ•ด์„œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋”ฐ์ ธ์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์œผ๋‚˜, ์™ผ์ชฝ ์œ„๋ถ€ํ„ฐ ์ฑ„์›Œ ๋‚˜๊ฐ€๋ฉด ์–ด์ฐจํ”ผ ๋˜‘๊ฐ™์€ ์กฐ๊ฑด์ด ๋˜๋ฏ€๋กœ 4๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜๋งŒ ๋”ฐ์ง€๋ฉด ๋œ๋‹ค.

โ€‹ ์ด๋ ‡๊ฒŒ L๋ชจ์–‘ ์ฐพ๊ธฐ์—์„œ ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์• ํ•œ ์ฝ”๋“œ๋ฅผ ํ•œ๋ฒˆ์— 4๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜๋งŒ ๋”ฐ์ง€๋ฉด ๋˜๋Š” ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค๋ฉด ๋ณต์žก๋„๊ฐ€ ๋Œ€ํญ ๊ฐ์†Œํ•  ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.

 

โ€‹ ๋˜ํ•œ L ๋ชจ์–‘ ํ•˜๋‚˜๋ฅผ ์ฐพ๋Š”๋‹ค๋Š” ๊ฒƒ์„ ํ•œ ์กฐ๊ฐ์œผ๋กœ ๋ณด๋Š” ๋ฐ์—๋Š” ์„ฑ๊ณตํ–ˆ์ง€๋งŒ, ์ „์ฒด L๋ชจ์–‘์˜ ๊ฐฏ์ˆ˜๋ฅผ N์œผ๋กœ ์ทจ๊ธ‰ํ•˜์—ฌ N๊ฐœ์˜ ์กฐ๊ฐ์ด ์ „์ฒด๋ฅผ ์™„์„ฑํ•œ๋‹ค๋Š” ์ƒ๊ฐ์€ ํ•˜์ง€ ๋ชปํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์งฐ๋‹ค. ๋”ฐ๋ผ์„œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ์‹๋„ ์ˆ˜์ •ํ•ด์•ผํ•  ๊ฒƒ์ด๋‹ค.

โ€‹ ์ฃผ์–ด์ง„ ๋‹ต์—์„œ๋Š” 4๊ฐœ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์ตœ๋Œ€ [50/3] = 16๊ฐœ์˜ ๋ธ”๋ก๋งˆ๋‹ค ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— 4์˜ 16์Šน ์ฆ‰, 2์˜ 32๊ฐœ๋ฅผ ๋‹ต์˜ ์ƒํ•œ์œผ๋กœ ๊ณ„์‚ฐํ•˜์˜€๋‹ค.

 

โ€‹ ๋ณธ์ธ์€ ํฐ ์นธ์ด ์—†์–ด์ง€๋Š” ๊ฒฝ์šฐ(map์ด ๋ชจ๋‘ ๋ฎํžˆ๋Š” ๊ฒฝ์šฐ)๋ฅผ white_sum์ด๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ๋‘์–ด ๊ณ„์† ๋ณ€๊ฒฝ์‹œํ‚ค๋Š” ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค.

โ€‹ ์ฃผ์–ด์ง„ ๋‹ต์—์„œ๋Š” ์ฒ˜์Œ์— ์™ผ์ชฝ ์ƒ๋‹จ์˜ ํฐ ์นธ์„ ์ฐพ๋Š” ๊ณผ์ •์—์„œ ํฐ ์นธ์„ ์ฐพ์„ ์ˆ˜ ์—†์œผ๋ฉด map์ด ์™„์„ฑ๋˜์—ˆ๋‹ค๊ณ  ํŒ๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ–ˆ๋‹ค. ํ•˜๋‚˜์˜ ์ƒํ™ฉ์„ ๋‘ ๊ฐ€์ง€ ๋ณ€์ˆ˜๋กœ ๋‚˜๋ˆ„์–ด ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ๋ณด๋‹ค ์ด์™€ ๊ฐ™์€ ๋ฐฉ์‹์ด ๋” ์ •ํ™•ํ•  ๊ฒƒ ๊ฐ™๋‹ค.

 

โ€‹ ๋ณธ์ธ์€ ์นธ์„ .๊ณผ *์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜์—ฌ์„œ ์ฑ„์šธ ๋•Œ๋Š” *๋ฅผ ์น˜์šธ ๋•Œ๋Š” .๋ฅผ ๋ฎ์–ด์”Œ์šฐ๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ์ง„ํ–‰ํ•˜์˜€๋‹ค. ๋”ฐ๋ผ์„œ ๊ฒน์น˜๋Š” ๊ฒƒ์„ ๋ฏธ๋ฆฌ ํŒŒ์•…ํ•œ ํ›„์— ๊ฒน์น˜์ง€ ์•Š๋Š” ๋ธ”๋ก๋งŒ ์ฑ„์›Œ์•ผํ•ด์„œ ์ฑ„์šฐ๊ธฐ ์ „ ์กฐ๊ฑด์„ ํŒ๋‹จํ•˜๋Š” ๊ณผ์ •์ด ๋งŽ๋‹ค.

โ€‹ ์ฃผ์–ด์ง„ ๋‹ต์—์„œ๋Š” ์ˆซ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฒน์น˜๋Š” ์นธ๋„ 2๋ผ๋Š” ์ˆซ์ž๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์˜€๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ์„ ์ ์œผ๋กœ ๋ธ”๋ก์„ ์ฑ„์šด ํ›„์— ํŒ๋‹จ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋Š” map์„ ๋” ์ž์ฃผ ๋ณ€ํ™”์‹œ์ผœ์„œ ์ข‹๋‹ค๊ณ  ๋ณด๊ธด ํž˜๋“  ๊ฒƒ ๊ฐ™๋‹ค.

๋ฐ˜์‘ํ˜•