# 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

# 9093 단어 뒤집기 (브론즈 1)

tc = int(input())
for _ in range(tc):
    result = ""
    sentence = list(input().split())
    for i in range(len(sentence)):
        for j in range(len(sentence[i]),0,-1):
            result+=sentence[i][j-1]
        result+=" "
    print(result)

 

# 17413 단어 뒤집기 2 (실버 3)

# point. 조건문 사용하기
# [::-1] 처음부터 끝까지 -1칸 간격으로(역순으로)

s = input()
tmp, result, flag = "", "", False

for i in s:
    if i == '<': # 태크 진입 시 true
        flag = True
        result += tmp[::-1] + "<" # 지금까지 tmp에 저장한 문자열 역순 출력
        tmp = "" # 비워줌
    elif i == '>': # 태그 벗어나면 false
        flag = False 
        result += ">"
    elif i == " ": 
        if flag: # 공백인데 태그 속이면 그냥 더해줌
            result +=" "
        else: # 공백인데 태그 밖이면 그 전까지 역순으로 출력
            result += tmp[::-1] + " "
            tmp = "" #비워줌
    else: # 일분 문자열
        if flag: # 태그 안이면 바로 결과에 더해줌
            result += i
        else: # 태그 밖이면 tmp에 넣고 나중에 역순 출력
            tmp += i
result += tmp[::-1] # 마지막 " " 다음에 나온 문자열 더해줌
print(result)

 

# 16956 늑대와 양 (실버 5) -> 방향벡터 사용해서 풀기

※ 울타리의 최소 개수를 구하는 것이 아니기 때문에 늑대의 상하좌우에 양이 없는지만 확인하면 된다.

R,C = map(int, input().split())
M = [list(input()) for i in range(R)]

dx, dy = [0,1, 0, -1], [1,0,-1,0]
ck = False # 양 찾기

for i in range(R):
    for j in range(C):
        if M[i][j] == "W":
            for w in range(4):
                ii, jj = i+dx[w], j+dy[w]
                if ii<0 or ii == R or jj<0 or jj==C: #에외처리
                    continue
                if M[ii][jj] == "S":
                    ck = True

if ck:
    print(0)
else:
    print(1)
    for i in range(R):
        for j in range(C):
            if M[i][j] not in 'SW':
                M[i][j] = "D"
    for i in M:
        print(''.join(i))

 

단계별로 풀어보기 - 1차원 배열

# 2577 숫자의 개수 (브론즈 2)

A = int(input())
B = int(input())
C = int(input())

num_count = [0,0,0,0,0,0,0,0,0,0]
result = str(A*B*C)
for i in range(len(result)):
    num_count[int(result[i])] +=1

for i in range(len(num_count)):
    print(num_count[i])

 

# 3052 나머지 (브론즈 2)

num_list = []
for i in range(10):
    n = int(input())
    num_list.append(n%42)

print(len(set(num_list)))

 

# 1546 평균 (브론즈 1)

n = int(input())
score = list(map(int, input().split()))
M = max(score)
result = 0
for i in range(n):
    score[i] = score[i]/M*100
    result += score[i]

print(result/n)

 

# 8958 OX퀴즈 (브론즈 2)

tc = int(input())
for i in range(tc):
    ox = input()
    result = 0
    score_plus = 0
    for i in range(len(ox)):
        if ox[i] == 'X': # X가 나오면 점수를 0로 초기화
            score_plus = 0
        else: # o이 연속으로 나오면 +1 추가해서 점수에 반영
            score_plus+=1
            result += score_plus
    print(result)

 

# 4344 평균은 넘겠지 (브론즈 1)

c = int(input())
for i in range(c):
    n_socre = list(map(int, input().split()))
    cnt = 0
    average = sum(n_socre[1:])/n_socre[0]
    for score in n_socre[1:]:
        if average < score:
            cnt+=1
    rate = cnt/n_socre[0]*100
    print(str("%.3f" % round(rate, 3)) + "%")

    # print("{0}%".format(round(rate, 3)))
    # 첫번째 예제가 40.0%로 출력됨 0퍼센트로 떨어지더라도 무조건 소수점 3번째까지 표기하기 위해서 %.3f를 사용해야한다.

 

반응형

'알고리즘 > baekjoon' 카테고리의 다른 글

20210115_코테공부  (0) 2021.01.14
20210114_코테공부  (0) 2021.01.14
20210113_코테공부  (0) 2021.01.13
20210112_코테공부  (0) 2021.01.12
20210111_코테공부  (0) 2021.01.11

+ Recent posts