โ 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 - 13 Solvedโ (0) | 2023.12.15 |
---|---|
โ Greedy Upper-Advanced I - 1 Solvedโ (1) | 2023.10.18 |
โ Greedy Advanced I - 5 Solvedโ (0) | 2023.08.30 |
โ Sorting Advanced I - 5 Solvedโ (0) | 2023.07.28 |
โ DP Advanced I - 6 Solvedโ (0) | 2023.01.08 |
๋๊ธ