코딩테스트/백준) 단계별로 풀기

백준- 단계별로 풀어보기| 12단계- 브루트 포스

영최 2023. 4. 20. 14:44
728x90
단계 문제 번호 제목 내 코드 코드 비교
1 2798 블랙잭 n,m = map(int,input().split())
cards = list(map(int,input().split()))


li = []
for i in range(n):
    for j in range(n):
        for k in range(n):
            if i!=j and j!=k and k!=i:
                sum = cards[i]+cards[j]+cards[k]
                if sum <m:
                    li.append(sum)
print(max(li))
idx = li.index(max(li))
 
넘지 않아야한다 -> 거나 작다
카드 뽑기 중복 허용 안됨 -> if i!=j and j!=k and k!=i:

2 2231 분해합 n= int(input())


for i in range(1,n+1):
    li = map(int, list(str(i))) #각 자리수 리스트
    total_sum = i + sum(li)
    if total_sum == n:
        m = i
        break
try:
    print(m)
except:
    print(0)
 
python에서 undefine 처리는 try- except문을 사용하자 
3 19532 수학은 비대면강의입니다 a, b, c, d, e, f = map(int, input().split())

x  = int((e*c-b*f) / (a*e -b*d))
y = int((-d*c+a*f) / (a*e -b*d))

print(x,y)
 
행렬식으로 풀었다.
4 1018 체스판 다시 칠하기 m, n = map(int, input().split())

input_arr = []
for i in range(m):
    row = list(input().strip())
    input_arr.append(row)


arr_1 = [ 
    ['W','B','W','B','W','B','W','B'],
    ['B','W','B','W','B','W','B','W'],
    ['W','B','W','B','W','B','W','B'],
    ['B','W','B','W','B','W','B','W'],
    ['W','B','W','B','W','B','W','B'],
    ['B','W','B','W','B','W','B','W'],
    ['W','B','W','B','W','B','W','B'],
    ['B','W','B','W','B','W','B','W'],
]

arr_2 = [ 
    ['B','W','B','W','B','W','B','W'],
    ['W','B','W','B','W','B','W','B'],
    ['B','W','B','W','B','W','B','W'],
    ['W','B','W','B','W','B','W','B'],
    ['B','W','B','W','B','W','B','W'],
    ['W','B','W','B','W','B','W','B'],
    ['B','W','B','W','B','W','B','W'],
    ['W','B','W','B','W','B','W','B'],
]

sum_1_li =[]
sum_2_li = []
for i in range(m-8+1): #행
    for j in range(n-8+1): #열
        sum_1 = 0
        sum_2 = 0
        for k in range(0,8):
            for l in range(0,8):
                if input_arr[i+k][j+l] != arr_1[k][l]:
                    sum_1 +=1
                if input_arr[i+k][j+l] != arr_2[k][l]:
                    sum_2 +=1   
        sum_1_li.append(sum_1)   
        sum_2_li.append(sum_2)   
print(min([min(sum_1_li),min(sum_2_li)]))   
N, M = map(int, input().split())
original = []
count = []

for _ in range(N):
    original.append(input())

for a in range(N-7):
    for b in range(M-7):
        index1 = 0
        index2 = 0
        for i in range(a, a+8):
            for j in range(b, b+8):
                if (i+j) % 2 == 0:
                    if original[i][j] != 'W':
                        index1 += 1
                    if original[i][j] != 'B':
                        index2 += 1
                else:
                    if original[i][j] != 'B':
                        index1 += 1
                    if original[i][j] != 'W':
                        index2 += 1
        count.append(min(index1, index2))

print(min(count))
 
5 1436 영화감독 숌 n = int(input())
cnt = 0
six_n = 666
while True:
    if '666' in str(six_n):
        cnt += 1
    if cnt == n:
        print(six_n)
        break
    six_n += 1
 
 
6 2839 설탕 배달 n =  int(input())
cnt = 0

max_i = n // 5 + 1
max_j = n // 3 + 1
li = []
for i in range(max_i):
    for j in range(5000):
        if 5*i + 3*j == n:
            li.append(i+j)

if (li != []):
    print(min(li))
else:
    print(-1)
num = int(input())
count = 0

while num >= 0:
  if num % 5 == 0:
    count += int(num // 5)
    print(count)
    break
  
  num -= 3
  count += 1
  
else:
  print(-1)
5*i + 3*j == n: 이부분을 생각하는게 중요했던 것 같다.
처음에  n=n%5 이런식으로 먼저 5를 나누고 시작했는데
그래서 6의 경우 3만으로 이루어져 있어서 오류가 났고,
11의 경우 5로 나눈 나머지가 1이되서 오류가 났다.
728x90