Problem Solving/브루트포스
-
[프로그래머스] 최소직사각형 - Python3Problem Solving/브루트포스 2023. 1. 11. 23:45
문제 설명 여러 명함 사이즈가 주어질 때, 명함을 모두 넣을 수 있는 지갑의 최소 크기를 구하는 문제 알고리즘 분류 - Brute Force 난이도 - Level 1 접근 방법 - Brute Force 명함을 돌릴 수 있기에 가로와 세로 중 큰 값이 중요하다. 따라서 가로와 세로 중 큰 값이 뒤로 올 수 있도록 각 배열을 정렬하고, 배열의 왼쪽 값과 오른쪽 값의 각 최댓값을 구해 곱하였다. 답안 코드 - Brute Force 정확성: 100, 합계: 100.0 / 100.0 def solution(sizes): answer = 0 max_i = 0 max_j = 0 for size in sizes: size = sorted(size) if max_i < size[0]: max_i = size[0] if ..
-
[백준-python] 1259번: 팰린드롬수Problem Solving/브루트포스 2022. 3. 4. 20:09
분류 - 브루트포스(?) 난이도 - 브론즈 1 답안 코드 메모리: 30860 KB , 시간: 68 ms, 코드 길이: 353 B import sys while True: flag=1 # 팰린드롬 수가 맞으면 1, 틀리면 0을 나타내는 플래그 num=int(sys.stdin.readline()) if num == 0: break # 숫자를 분해하여 거꾸로 배열에 넣음 n=[] while num>0: n.append(num%10) num = num//10 # 배열이 팰린드롬인지 검사 for i in range(0, len(n)//2): if n[i] != n[len(n)-i-1]: flag=0 break if flag==1: print("yes") else: print("no")
-
브루트포스(brute force search)란?Problem Solving/브루트포스 2022. 2. 7. 23:03
브루트포스(brute force search) 무식한(brute) 힘(force)으로 탐색하는 것. 즉, 가능한 모든 경우의 수를 탐색함으로써 원하는 결과를 도출하는 완전탐색 예시 자연수 n의 약수 찾기, 거스름돈을 지불하는 경우의 수와 최소 동전의 개수 구하기, BFS 등 출처: https://hcr3066.tistory.com/26 알고리즘 기법[전체 탐색] - 브루트 포스(brute force) 암호학에서의 브루트 포스(brute force attack)가 아닌 알고리즘의 브루트 포스(brute force search)에 관한 것을 작성한다. 브루트 포스(brute force) brute: 무식한, force: 힘 무식한 힘으로 해석할 수 있다... hcr3066.tistory.com
-
[백준-python] 1436번: 영화감독 숌Problem Solving/브루트포스 2022. 1. 27. 23:29
분류 - 브루트 포스 난이도 - 실버5 첫 시도 때 숫자를 바로 문자열로 바꿀 수 있다는 걸 모르고 헛수고했다..😂 첫번째 답안 코드 메모리 30864KB, 시간 7256ms # 입력 n=int(input()) # 1부터 시작해 1씩 증가시키며 그 수(i)를 문자열로 바꾸고, "666"이 있으면 카운트(cnt)를 더해줌. # 카운트(c)가 n과 같으면 그 수(i)를 출력하고 종료 i=0 cnt=0 while True: i+=1 j=i num=[] while j>0: num.append(j%10) j=j//10 string="".join(map(str, num)) if "666" in string: cnt+=1 if cnt==n: print(int((i))) break 두 번째 답안 코드 # 입력 n=in..
-
[백준-python] 1018번: 체스판 다시 칠하기Problem Solving/브루트포스 2022. 1. 24. 23:05
분류 - 브루트포스 난이도 - 실버5 4중 반복문은 처음 써본다... 더 심플한 풀이 없나 찾아봐야겠다. 답안 코드 n,m = map(int, input().split()) board=[] for _ in range(n): board.append(list(input())) min_cnt=2500 # 시작점을 (0,0)~(n-8, m-8)로 설정하면서 각 경우의 색칠 횟수를 구하고, 최솟값을 저장함 for r in range(n-8+1): for c in range(m-8+1): cnt=0 # 시작점의 값을 W로 설정할 때 for row in range(r, r+8): for col in range(c, c+8): if ((row%2 == 1 and col%2 == 0) or (row%2 == 0 and ..
-
[백준-python] 7568번: 덩치Problem Solving/브루트포스 2022. 1. 24. 00:18
분류 - 브루트포스 난이도 - 실버5 답안코드 # 입력 n=int(input()) dungchis=[] for _ in range(n): dungchis.append(list(map(int, input().split()))) # 각 학생의 등수를 1로 저장한 후, 덩치가 큰 학생이 발견되면 등수를 1 더함 ranks=[] for i in range(len(dungchis)): rank=1 for j in range(len(dungchis)): if i!=j and dungchis[j][0] > dungchis[i][0] and dungchis[j][1] > dungchis[i][1]: rank=rank+1 ranks.append(rank) # 출력 for rank in ranks: print(rank,e..
-
[백준-python] 2231번: 분해합Problem Solving/브루트포스 2022. 1. 24. 00:01
분류 - 브루트포스 난이도 - 브론즈2 주의사항 생성자를 발견하지 못했을 경우도 잊지 말고 작성해주어야 함 답안 코드 # 입력 n=int(input()) # 1부터 N까지의 수 중 생성자가 발견되면 생성자를, 발견되지 않으면 0을 출력 for i in range(1,n+1): sum=i # i의 분해합을 저장할 변수 num=i # i의 각 자리의 숫자를 나타낼 변수 # i의 분해합을 구함 while num>0: sum=sum+num%10 num=num//10 # i가 n의 생성자면 i를 반복문을 탈출하고 i를 출력 if sum==n: print(i) break # i가 반복문을 탈출하지 못한 채로 끝까지 반복을 수행했다면, 생성자를 발견하지 못한 것이므로 0을 출력 if i==n: print(0)
-
[백준-python] 2798번: 블랙잭Problem Solving/브루트포스 2022. 1. 23. 23:41
분류 - 브루트포스 난이도 - 브론즈2 관련 개념 집합 특징 인덱스로 접근할 수 없다. sum은 가능하다. 주의사항 문제를 잘 읽자. 세 카드의 합이 M을 넘기면 안된다. (질문 게시판 읽어보니 이것 때문에 틀린 분들이 한 둘이 아닌 듯..) 답안 코드 from itertools import combinations # 입력 n, m = map(int,input().split()) cards = list(map(int,input().split())) diff=300000 # (m-세 카드의 합): 최댓값으로 초기화 r_combi = [] # 정답이 되는 세 카드의 조합을 저장할 리스트 # 세 카드의 조합 중 합이 m을 넘지 않는 선에서 (m-세 카드의 합)이 최소가 되는 조합을 구함 for combi in..