선릉역 1번 출구

baekjoon - 브루트 포스 본문

Algorithm/Algorithm 문제풀이

baekjoon - 브루트 포스

choideu 2021. 8. 19. 17:56

브루트 포스란 무차별 대입 공격을 일컫는 말로 특정 암호를 풀기 위해서 모든 값을 대입하는 것을 의미한다.

 

1.  2798

N, M = map(int, input().split())
num_ls = list(map(int, input().split()))
max = []
key = 0
for i in range(len(num_ls)-2):
    for j in range(i+1,len(num_ls)-1):
        for k in range(j+1, len(num_ls)):
            max.append(num_ls[i] + num_ls[j] + num_ls[k]) //3가지 카드 값 리스트 만들기
         
max = list(set(max)) //중복 제거
max.sort() //정렬

if max[len(max)-1] > M: //3가지 값의 제일 큰 값이 M을 넘는 지 판단. 안넘으면 제일 마지막 리스트 값을 출력.
    for i in range(len(max)):
        key = i
        if max[i] > M:
            break
    print(max[key-1])
else:
    print(max[len(max)-1])
num, max =map(int,input().split())
num_list = input().split()
num_list = list(map(int,num_list))
key = 0
count = 0
for i in range(len(num_list)):
    for j in range(i+1,len(num_list)):
        for k in range(j+1,len(num_list)):
            count += 1
            if num_list[i]+num_list[j]+num_list[k] <= max:
                if key < num_list[i]+num_list[j]+num_list[k]:
                    key = num_list[i]+num_list[j]+num_list[k] 

두 번째 코드는 max보다 작은 것들 중에서 가장 큰 값을 찾는 알고리즘이다.

 

2. 2231

a = int(input())
key = 0
for i in range(1,a):
    cons = i
    for j in range(len(str(i))):
        cons += int(str(i)[j])
    if cons == a:
        key = i
        break
if key == 0:
    print(0)
else:
    print(key)
num = int(input())
answer = 0

for i in range(1, num+1):
    coef_num_list = list(map(int, str(i)))
    answer = i + sum(coef_num_list)

    if answer == num:
        print(i)
        break

    if i == num:
        print(0)

 

3. 7568

a = int(input())
x = []
y = []
result = []
for i in range(a):
    b, c = map(int, input().split())
    x.append(b)
    y.append(c)

for i in range(a):
    cnt = 1
    for j in range(a):
        if i != j:
            if x[i] < x[j] and y[i] < y[j]:
                cnt += 1
    result.append(cnt)

for i in range(a):
    print(result[i],end=" ")

 

4. 1018

a, b = map(int, input().split())
line = [0] * a
square = []
for i in range(a):
    line[i] = input()

for i in range(a - 7):
    for j in range(b - 7):
        idx1 = 0
        idx2 = 0
        for o in range(i,i+8):
            for k in range(j,j+8):
                if (o + k) % 2 == 0:
                    if line[o][k] != 'W': idx1 += 1  
                    if line[o][k] != 'B': idx2 += 1
                else :
                    if line[o][k] != 'B': idx1 += 1
                    if line[o][k] != 'W': idx2 += 1 
//o+k % 2 ==0은 하나씩 옆으로 이동하는 것을 의미하고 시작점을 B으로 할 것이냐 W으로 할 것이냐 두 가지 케이스로 나눠서 둘 중 작은 것을 취하게 됨
        square.append(idx1)
        square.append(idx2)
        
print(min(square))

 

5. 1436

a = int(input())
cnt = 0
num = 666
while cnt != a:
    if '666' in str(num):
        cnt += 1
    num += 1
print(num-1)

'Algorithm > Algorithm 문제풀이' 카테고리의 다른 글

baekjoon - 10828  (0) 2021.08.28
baekjoon - 재귀  (0) 2021.08.21
baekjoon - 기본 수학2  (0) 2021.08.18
baekjoon - 기본 수학1  (0) 2021.08.17
baekjoon - 문자열  (0) 2021.08.17
Comments