N = int(input())
G = [list(map(int, input().split())) for i in range(N)]
# 0*N+0
# 0 ~ N**N -1 까지
ans = 10000
dx, dy = [0, 0, 0, 1, -1], [0, 1, -1, 0, 0] # 정지,위,아래,우,좌
# 꽃 a,b,c에 대한 비용 가능할때 리턴
def ck(list):
ret = 0 # 최소비용 저장
flow = [] # 위치 저장
for flower in list:
x = flower // N # 숫자로 표현한 좌표를 x,y 좌표로 바꿔줌
y = flower % N
if x == 0 or x == N - 1 or y == 0 or y == N - 1: # 꽃이 밖으로 나가면
return 10000
for w in range(5): # 5방향 저장
flow.append((x + dx[w], y + dy[w]))
ret += G[x + dx[w]][y + dy[w]]
if len(set(flow)) != 15: # 5*3 =15개가 아니면 겹친거
return 10000
return ret
for i in range(N * N): # 3개의 꽃 위치 전수조사하기 (x,y좌표로 생각하지 않고 6*6이면 0~35로 설정)
for j in range(i + 1, N * N):
for k in range(j + 1, N * N):
ans = min(ans, ck([i, j, k])) #최소값 갱신
print(ans)
단계별로 풀어보기 - 함수
# 15596 정수 N개의 합 (브론즈2)
def solve(a):
ans = 0
for i in range(len(a)):
ans+=a[i]
return ans
# 4673 셀프 넘버 (브론즈1)
point. 정수 n의 각 자리수 더하기 -> 문자열로 변형후 정수형으로 바꿔 더해준다.
self_num = set(range(1,10001))
generated_num = set()
for i in range(1,10001):
for j in str(i):
i+=int(j)
generated_num.add(i)
self_num = self_num - generated_num
for i in sorted(self_num):
print(i)
# 1065 한수 (실버4)
point. 숫자를 str을 통해 자릿수대로 분리하여 list로 저장
num = int(input())
hansu = 0
for i in range(1,num+1):
if i<100:
hansu+=1
else:
nums = list(map(int, str(i)))
if nums[2]-nums[1] == nums[1]-nums[0]:
hansu+=1
print(hansu)
반응형
'알고리즘 > baekjoon' 카테고리의 다른 글
20210115_코테공부 (0) | 2021.01.14 |
---|---|
20210114_코테공부 (0) | 2021.01.14 |
20210113_코테공부 (0) | 2021.01.13 |
20210112_코테공부 (0) | 2021.01.12 |
20210107_코테공부 (0) | 2021.01.07 |