# 14620 꽃길 (실버2)

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

+ Recent posts