Algorithm/BruteForce 18

[소프티어 6273번] 택배 마스터 광우

Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.ai import sysfrom itertools import permutationsinput = sys.stdin.readline# 레일의 순서를 조작해서 최소한의 무게만 들 수 있게 일을 함# N개의 레일, 각 레일은 Ni 무게 전용 레일로 주어진다.(같은 무게의 레일 X)# 레일의 순서가 정해지면 택배 바구니 무게(M)를 넘어가기 전까지 택배 바구니에 택배를 담아 들고 옮겨야 함# 레일 순서대로 택배를 담되, 바구니 무게를 초과하지 않은 만큼 담아서 이동하게 되면 1번 일한 것으로 쳐줌# (단, 택배는 순서대로 담아야 하므로 레일의 순서를 건너 뛸 순 없다)# 총 k번 일을 하는데 최소한의 무게로 일을 할 수 있도록 하자n, m, k ..

[소프티어 7594번] 나무 조경

Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.aiimport sysfrom itertools import combinationsinput = sys.stdin.readline# 최대 4번 인접해 있는 두 나무를 묶을 예정# 묶은 나무끼리는 서로 겹쳐서는 안됨# 두 나무가 묶였을 때 얻을 수 있는 아름다움은 '두 나무의 키의 합'과 동일# 묶인 쌍의 아름다움의 합을 최대로 만들려고 함n = int(input())heights = [list(map(int,input().split())) for _ in range(n)]dx, dy = [-1,1,0,0], [0,0,-1,1]answer = float("-inf")datas = []for i in range(n): for j in ra..

[백준 17471번] 게리맨더링

17471번: 게리맨더링선거구를 [1, 4], [2, 3, 5, 6]으로 나누면 각 선거구의 인구는 9, 8이 된다. 인구 차이는 1이고, 이 값보다 더 작은 값으로 선거구를 나눌 수는 없다.www.acmicpc.netimport sys from itertools import combinations from collections import deque # 구역을 두 개의 선거구로 나눠야 하고, 각 구역은 두 선거구 중 하나에 포함되어야 한다. # 선거구는 구역을 적어도 하나 포함해야 하고, 한 선거구에 포함되어 있는 구역은 모두 연결되어 있어야 한다. input = sys.stdin.readline n = int(input()) peoples = [0] + list(map(int,input().split..

[백준 1759번] 암호 만들기

1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net import copy l, c = map(int,input().split()) alpha_set = set(input().split()) answer = [] vowels = set(['a','e','i','o','u']) # 암호는 서로 다른 L개의 알파벳 소문자들로 구성 # 최소 한 개의 모음(a, e, i, o, u)과 최소 두 개의 자음으로 구성 # 암호를 이루는 알파벳이 암호에서 증가하는 순서로 배열되었을 것 def dfs(string,remain_set):..

[백준 2529번] 부등호

2529번: 부등호 두 종류의 부등호 기호 ‘’가 k개 나열된 순서열 A가 있다. 우리는 이 부등호 기호 앞뒤에 서로 다른 한 자릿수 숫자를 넣어서 모든 부등호 관계를 만족시키려고 한다. 예를 들어, 제시 www.acmicpc.net import copy k = int(input()) signs = list(input().split()) minimum, maximum = float("inf"), float("-inf") def dfs(numbers,num_set): global minimum, maximum, minimum_string, maximum_string length = len(numbers) if length == k+1: # 숫자의 개수가 k+1를 만족할 경우 함수 종료 final_value..

[백준 14889번] 스타트와 링크(재풀이)

14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net [백준 14889번] 스타트와 링크 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net n = int(input()) visited = [False for _ in range(n)] data = woohyun-king.tistory.com from itertools import combinations from ite..

[프로그래머스] 숫자의 표현

def solution(n): answer = 0 for i in range(1,n+1): sum_value = 0 for j in range(i,n+1): sum_value += j if sum_value == n: answer += 1 elif sum_value > n: break return answer 이번 문제는 연속된 자연수로 n을 만들 수 있는 모든 경우의 수를 구하는 브루트포스 (brute force, 완전 탐색) 문제이다. 처음에는 dp 문제인 줄 알고 패턴과 점화식을 찾으려고 노력했으나, 도무지 규칙을 생각해봐도 나오지 않아 다른 사람의 풀이를 참고해본 결과 완전 탐색으로 풀이해야 한다는 것을 알게 되었다.(n

[백준 18808번] 스티커 붙이기

18808번: 스티커 붙이기 혜윤이는 최근에 다양한 대회를 참여하면서 노트북에 붙일 수 있는 스티커들을 많이 받았다. 스티커는 아래와 같이 사각 모눈종이 위에 인쇄되어 있으며, 스티커의 각 칸은 상하좌우로 모두 연 www.acmicpc.net n, m, k = map(int,input().split()) paper = [[0]*m for _ in range(n)] count = 0 for _ in range(k): r,c = map(int,input().split()) sticker = [list(map(int,input().split())) for _ in range(r)] def check_available(paper,x,y,sticker,sticker_row_len,sticker_col_len): ..

[백준 9079번] 동전 게임

9079번: 동전 게임 입력의 첫 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 세 줄로 이루어지며, 한 줄에 세 개의 동전모양이 주어지는데, 각각의 동전 표시 사이에는 하나의 공백이 www.acmicpc.net from collections import deque t = int(input()) def reverse_row(area, index): # 행 단위로 동전을 뒤집는 함수 temp = [item[:] for item in area] for i in range(3): if area[index][i] == "H": temp[index][i] = "T" elif area[index][i] == "T": temp[index][i] = "H" return temp ..

[백준 20164번] 홀수 홀릭 호석

20164번: 홀수 홀릭 호석 호석이는 짝수랑 홀수 중에서 이니셜이 같은 홀수를 더 좋아한다. 운전을 하던 호석이는 앞차의 번호판이 홀수로 가득할 때 사랑스러움을 느낄 정도이다. 전화번호도 홀수만 있고 싶다. 그렇게 www.acmicpc.net # 주어진 수 N ( maximum: maximum = new_count return elif len(num_str) == 2: # 3. 수가 두자리이면 2개로 나눠서 합을 구하여 새로운 수로 생각 new_num = int(num_str[0]) + int(num_str[1]) new_str = list(str(new_num)) dfs(new_str, odd_count + current_odd_count) elif len(num_str) >= 3: # 4. 수가 세..