선릉역 1번 출구
baekjoon - 브루트 포스 본문
브루트 포스란 무차별 대입 공격을 일컫는 말로 특정 암호를 풀기 위해서 모든 값을 대입하는 것을 의미한다.
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