Algorithm/BruteForce 18

[백준 2798번] 블랙잭

2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net n, m = map(int,input().split()) card_list = list(map(int,input().split())) visited = [False]*n min_diff = float("inf") def dfs(total,count): global min_diff global answer diff = m - total if count == 3: if diff >= 0 and diff < min_diff: min_d..

[프로그래머스 Lv.1] 모의고사

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr def solution(answers): answer = [] def method_1(answers): inputs = [1,2,3,4,5]*(10000//5 + 1) result = [1 for i,value in enumerate(answers) if answers[i] == inputs[i]] return sum(result) def method_2(answers): inputs = [2,1,2,3,2,4,2,5]*(10000//8 + 1) result = [1 for i,value in enumerat..

[프로그래머스 Lv.1] 최소직사각형

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr def solution(sizes): sizes = [sorted(x,reverse=True) for x in sizes] # [[60, 50], [70, 30], [60, 30], [80, 40]] widths = [x[0] for x in sizes] # [60, 70, 60, 80] heights = [x[1] for x in sizes] # [50, 30, 30, 40] return max(widths)*max(heights) 이번 문제는 주어진 명함들의 가로와 세로길이가 주어졌을 때, 명함을 가로나 ..

[백준 1476번] 날짜 계산

E, S, M = map(int,input().split()) RESULT_RANGE = 15*28*19 + 1 for i in range(RESULT_RANGE): a, b, c = i%15 + 1, i%28 + 1, i%19 + 1 if E == a and S == b and M == c: print(i + 1) break 이번 문제는 E, S, M 이라는 수를 가지는 년도를 나타낼 때, 주어진 E, S, M으로 표시되는 가장 빠른 년도를 구하는 문제이다. 다만, 여기서 주의해야할 점은 세 수는 모두 서로 다른 범위를 가진다는 점이다. 이 문제의 풀이에 핵심은 '가능한 경우의 수를 모두 탐색해보는 완전 탐색, 즉 Brute Force 알고리즘을 사용해야 한다는 점'과 '나머지를 활용하여 값을 비교한다..

[백준 1107번] 리모컨

n = int(input()) m = int(input()) ans = abs(100 - n) if m != 0: # 고장난게 있을 경우만 인풋을 받음 broken = list(input().split()) else: broken = [] # 작은수에서 큰수로 이동할땐 500,000 까지만 보면 되지만 # 반대로 큰수에서 작은수로 내려올수도 있으므로 1,000,000 까지 봐야함 for i in range(1000001): for j in str(i): if j in broken: #해당 숫자 버튼이 고장난 경우 스탑 break else: # 번호를 눌러서 만들 수 있는 경우엔 ans = min(ans, len(str(i)) + abs(i - n)) #min(기존답, 숫자 버튼 클릭 수 + 해당 번호로부..

[백준 3085번] 사탕 게임

n = int(input()) array = [[] for _ in range(n)] nx = [-1,1,0,0] ny = [0,0,-1,1] for i in range(n): array[i] = list(input()) # 행에서 연속된 문자의 개수를 확인하는 함수 def row_check(x,y): count = 1 for i in range(y,n+1): if i == n-1: break if array[x][i] == array[x][i+1]: count += 1 else: break for i in range(y,-1,-1): if i == 0: break if array[x][i] == array[x][i-1]: count += 1 else: break return count # 열에서 연속된..

[BF] 브루스 포스 알고리즘의 개념

Brute Force 알고리즘이란 ? 복잡한 알고리즘을 굳이 생각하지않고, 컴퓨터의 빠른 연산력을 이용해 모든 경우를 전부 탐색하는 알고리즘을 의미합니다. brute force, BF, 완전탐색(exhaustive search), 완탐 정도로 불립니다. 최악의 경우라도 모든 경우를 컴퓨터로 살펴보기에 문제가 없다면 단순히 모든 경우를 살펴보면 됩니다. 단순히 모든 경우를 보는것도 하나의 알고리즘이라 할 수 있습니다. 결국 알고리즘으로 치자면 가장 쉬운 알고리즘이나, 활용 방법에 따라 최고의 효율을 보여줄 수 있는게 brute force 입니다. (컴퓨터로 적정한 시간내에 처리될 만한 수준의 데이터라면, 복잡하게 시간들여 생각할 것 없이 전부 탐색해보면 되기 때문) Brute Force 알고리즘의 종류 ..