BOJ/๐Ÿฅ‡

โ˜…BF Advanced I - 3 Solvedโ˜…

metamong 2023. 10. 6.

โ˜… 14500 ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ โ˜…

 

import sys
input=sys.stdin.readline
N,M=map(int,input().split())
tetris=[]
for _ in range(N):
    tetris.append(list(map(int,input().split())))
ans=0
for i in range(N):
    for j in range(M):
        #1x4
        if j<=(M-4):
            cur=tetris[i][j]+tetris[i][j+1]+tetris[i][j+2]+tetris[i][j+3]
            ans=max(cur,ans)
        #4x1
        if i<=(N-4):
            cur=tetris[i][j]+tetris[i+1][j]+tetris[i+2][j]+tetris[i+3][j]
            ans=max(cur,ans)
        #2x2
        if i<=(N-2) and j<=(M-2):
            cur=tetris[i][j]+tetris[i+1][j]+tetris[i][j+1]+tetris[i+1][j+1]
            ans=max(cur,ans)
        #2x3
        if i<=(N-2) and j<=(M-3):
            a,b,c,d,e,f=tetris[i][j],tetris[i][j+1],tetris[i][j+2],tetris[i+1][j],tetris[i+1][j+1],tetris[i+1][j+2]
            ans=max(a+b+c+e,ans)
            ans=max(b+d+e+f,ans)

            ans=max(a+b+c+d,ans)
            ans=max(a+d+e+f,ans)
            ans=max(c+d+e+f,ans)
            ans=max(a+b+c+f,ans)

            ans=max(b+c+d+e,ans)
            ans=max(a+b+e+f,ans)
        #3x2
        if i<=(N-3) and j<=(M-2):
            a,b,c,d,e,f=tetris[i][j],tetris[i][j+1],tetris[i+1][j],tetris[i+1][j+1],tetris[i+2][j],tetris[i+2][j+1]
            ans=max(a+c+d+e,ans)
            ans=max(b+c+d+f,ans)

            ans=max(a+b+c+e,ans)
            ans=max(a+c+e+f,ans)
            ans=max(a+b+d+f,ans)
            ans=max(b+d+e+f,ans)

            ans=max(a+c+d+f,ans)
            ans=max(b+c+d+e,ans)
print(ans)

 

๐ŸŽข ํ…ŒํŠธ๋ฆฌ์Šค 4๊ฐœ size๋กœ ๋‚˜๋ˆ„์–ด ๋ถ„์„

 

: 1~3๋ฒˆ์€ ๋ชจ์–‘ ๊ทธ๋Œ€๋กœ ํ™•์ธ / 4๋ฒˆ๊ณผ 5๋ฒˆ์€ ๊ฐ๊ฐ 8๊ฐœ์˜ ํ…ŒํŠธ๋ฆฌ์Šค ๋ชจ์–‘ ๊ตฌํ˜„

 

๐ŸŽข ์ง์ ‘ ์œ„ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜ ๋”ฐ์ ธ ์ตœ๋Œ“๊ฐ’ update


โ˜… 1107 ๋ฆฌ๋ชจ์ปจ โ˜…

 

import sys
input=sys.stdin.readline
from itertools import product

N=int(input())
M=int(input())
A=abs(N-100) #1) only +, -
B=1_000_000

bs=[] #brokens
if M!=0:bs=list(map(int,input().split()))
ds={0,1,2,3,4,5,6,7,8,9}-set(bs) #digits

if len(str(N))>1:
    pos1=list(product(ds,repeat=len(str(N))-1))
else:
    pos1=[]
pos2=list(product(ds,repeat=len(str(N))))

if len(str(N))==6:
    pos3=[]
else:
    pos3=list(product(ds,repeat=len(str(N))+1))

for tup in pos1+pos2+pos3:
    n = int(''.join(map(str, tup)))
    B=min(B,len(str(n))+abs(n-N))

print(min(A,B))

 

๐ŸŽข ์›ํ•˜๋Š” ๋ฒˆํ˜ธ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” (1) ์ธ์ ‘ ์ฑ„๋„ ๋ฒˆํ˜ธ ์ž…๋ ฅ ๋’ค + - ์ž…๋ ฅ (2) + -๋กœ๋งŒ ์ž…๋ ฅ

 

๐ŸŽข ๊ณ ์žฅ๋‚œ ๋ฒˆํ˜ธ ์ œ์™ธ ๊ฐ€๋Šฅ ๋ฒ„ํŠผ๋งŒ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์ˆซ์ž๋ฅผ product()๋กœ ๋งŒ๋“ค๊ณ  ์ผ์ผ์ด BF๋กœ ์ตœ์†Œ case ์ฐพ๊ธฐ

(์ด ๋•Œ ์ž๋ฆฟ์ˆ˜๊ฐ€ 0์ด๋‚˜ 6์ด ์•„๋‹Œ ๊ฒฝ์šฐ ํ•œ ๋‹จ๊ณ„ ์ ์€ ์ž๋ฆฟ์ˆ˜ / ๋†’์€ ์ž๋ฆฟ์ˆ˜์—์„œ์˜ case๋„ product()๋กœ ๋งŒ๋“ค๊ณ  ์ผ์ผ์ด ์ฐพ๊ธฐ)

 

๐ŸŽข itertools์˜ product() ํ•จ์ˆ˜ + product()์˜ ๊ฒฐ๊ณผ tuple์„ ์ž์—ฐ์ˆ˜๋กœ ๋ฐ”๊พธ๋Š” int(''.join(map(str,tup)))

(ex) (0, 0, 0, 3, 3)์€ 00033์ด ์•„๋‹Œ 33์œผ๋กœ ๋ฐ”๊ฟˆ)


โ˜… 17779 ๊ฒŒ๋ฆฌ๋งจ๋”๋ง 2 โ˜…

 

import sys, copy
input=sys.stdin.readline
N=int(input())
arr,total,ans=[],0,10*100

def get_area(arr,s,e,d1,d2,total):
    a1,a2,a3,a4,a5=0,0,0,0,0
    #mark ! in area 5 border
    for x in range(d1+1):
        if 0<=(s+x)<N and 0<=(e-x)<N:
            arr[s+x][e-x] = '!'
        if 0<=(s+d2+x)<N and 0<=(e+d2-x)<N:
            arr[s+d2+x][e+d2-x] = '!'
    for x in range(d2+1):
        if 0<=(s+x)<N and 0<=(e+x)<N:
            arr[s+x][e+x] = '!'
        if 0<=(s+d1+x)<N and 0<=(e-d1+x)<N:
            arr[s+d1+x][e-d1+x] = '!'

    #mark ! in inner area 5
    for x in range(s,s+d1+d2+1):
        if x==s or x==(s+d1+d2):
            continue #already marked (area 5 only once in a row)
        cnt=2
        for y in range(N):
            if arr[x][y] == '!':
                cnt-=1            
            if cnt == 0:
                break
            if cnt==1:
                arr[x][y] = '!'

    for x in range(N):
        for y in range(N):
            if x<(s+d1) and y<=e:
                if arr[x][y] != '!': a1+=arr[x][y]
            if x<=(s+d2) and e<y<=(N-1):
                if arr[x][y] != '!': a2+=arr[x][y]
            if (s+d1)<=x<=(N-1) and y<(e-d1+d2):
                if arr[x][y] != '!': a3+=arr[x][y]
            if (s+d2)<x<=(N-1) and (e-d1+d2)<=y<=(N-1):
                if arr[x][y] != '!': a4+=arr[x][y]
    a5=total-(a1+a2+a3+a4)
    return (a1,a2,a3,a4,a5)

for _ in range(N):
    r=list(map(int,input().split()))
    arr.append(r)
    total+=sum(r)

for x in range(0,N):
    for y in range(1,N):
        for d1 in range(1,N+1):
            for d2 in range(1,N+1):
                if (0<=x<(x+d1+d2)<=(N-1)) and (0<=(y-d1)<y<(y+d2)<=(N-1)):
                    a1,a2,a3,a4=0,0,0,0
                    new_arr = copy.deepcopy(arr) #copying arr every time
                    tup_areas=get_area(new_arr,x,y,d1,d2,total)
                    ans=min(ans,max(tup_areas)-min(tup_areas)) #update
print(ans)

 

๐ŸŽข idea: ๋จผ์ € a5 ์˜์—ญ์— ! ํ‘œ์‹œ → a1 / a2 / a3 / a4 ์˜์—ญ traversing ์ง„ํ–‰ํ•˜๋ฉด์„œ !๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๊ฐ๊ฐ count

 

โ€ป ์ด ๋•Œ x,y ๋ชจ๋‘ index 0 ~ N-1 ๋ฒ”์œ„ if๋ฌธ ์กฐ๊ฑด (๋ฌธ์ œ์—์„œ๋Š” (x,y) ์ขŒํ‘œ 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ณ  (0,0)์€ ์™ผ์ชฝ ์œ„์—์„œ ์‹œ์ž‘. x๋Š” ์•„๋ž˜์ชฝ, y๋Š” ์˜ค๋ฅธ์ชฝ ์ง„ํ–‰์ด๊ธฐ์— ๋ฌธ์ œ ์ƒ์˜ ์ขŒํ‘œ์™€ index ํ˜ผ๋™ ๋งž์ถœ ํ•„์š”)

 

๐ŸŽข area 5 ์ •ํ•˜๊ธฐ

โ‘  border + โ‘ก inner part ์ •ํ•˜๊ธฐ

: border ๋จผ์ € if๋ฌธ ๋„ค ๋ฒˆ ๋Œ๋ฆฌ๋ฉฐ ! marking for loop s๋ถ€ํ„ฐ s+d1+d2๊นŒ์ง€ ์œ„์˜ ํ–‰๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ๋Œ๋ฆฌ๊ธฐ s+1ํ–‰๋ถ€ํ„ฐ s+d1+d2-1ํ–‰๊นŒ์ง€๋Š” cnt 2์—์„œ 0๋˜๊ธฐ ์ „, ์ฆ‰ cnt == 1์ผ๋•Œ inner ! marking

 

๐ŸŽข ๋งค๋ฒˆ ์›๋ž˜ array์—์„œ ์ง„ํ–‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ deepcopy()

 

๐ŸŽข total์—์„œ ์ตœ์ข…์ ์œผ๋กœ ๊ตฌํ•œ a1 ~ a4 ๋บ€ ๋‚จ์€ ์˜์—ญ a5 ๊ฒฐ์ •


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'BOJ > ๐Ÿฅ‡' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

โ˜…BFS&DFS Advanced I - 10 Solvedโ˜…  (0) 2023.12.15
โ˜…Greedy Upper-Advanced I - 1 Solvedโ˜…  (1) 2023.10.18
โ˜…Greedy Advanced I - 4 Solvedโ˜…  (0) 2023.08.30
โ˜…Sorting Advanced I - 5 Solvedโ˜…  (0) 2023.07.28
โ˜…DP Advanced I - 4 Solvedโ˜…  (0) 2023.01.08

๋Œ“๊ธ€