Bruteforce 19

[백준 2573번] 빙산

2573번: 빙산 첫 줄에는 이차원 배열의 행의 개수와 열의 개수를 나타내는 두 정수 N과 M이 한 개의 빈칸을 사이에 두고 주어진다. N과 M은 3 이상 300 이하이다. 그 다음 N개의 줄에는 각 줄마다 배열의 각 행을 www.acmicpc.net from collections import deque import copy # 각 칸의 높이는 자연수로 저장 # 빙산이 아닌 바다는 0으로 저장 # 매년 동서남북에 존재하는 바다의 개수만큼 줄어듦 # 단, 각 칸의 저장된 높이는 0에서 더 줄어들지 X dx = [-1,1,0,0] dy = [0,0,-1,1] n, m = map(int,input().split()) area = [list(map(int,input().split())) for _ in rang..

카테고리 없음 2023.10.06

[백준 14888번] 연산자 끼워넣기

14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 곱 www.acmicpc.net # 식의 계산은 우선 순위 무시하고 앞에서부터 진행 # 나눗셈은 몫만 취한다(//) # 음수를 양수로 나눌 때는 음수를 양수로 바꾼 뒤 몫을 취한뒤 음수로 바꾼다 n = int(input()) data = list(map(int,input().split())) # 0 : 덧셈 개수, 1 : 뺄셈 개수, 2 : 곱셈 개수, 3 : 나눗셈 개수 operator_count = list(map(int,input(..

Algorithm/DFS 2023.10.06

[백준 15686번] 치킨 배달

15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net import itertools def calculate_distance(r1,c1,r2,c2): return abs(r1-r2) + abs(c1-c2) n, m = map(int,input().split()) input_city = [list(map(int,input().split())) for _ in range(n)] chicken_house_list = set() house_list = set() min_value = float("inf..

[백준 16637번] 괄호 추가하기

# 우선순위 X, 중첩괄호 X, 괄호 없어도 Ok # 괄호 안에는 연산자 1개만 가능 # 괄호를 적절히 추가해서 최대값 만들기 n = int(input()) formula = list(input()) # 최대값 초기화 max_value = float("-inf") # 주어진 값 2개를 연산하는 함수 def calculate(num1,operator,num2): if operator == '+': return num1 + num2 elif operator == '-': return num1 - num2 elif operator == "*": return num1 * num2 def dfs(index,value): global max_value # dfs로 마지막 값까지 계산을 마쳤을 경우 if index ..

Algorithm/DFS 2023.08.10

[백준 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 알고리즘의 종류 ..