본문 바로가기

BOJ 알고리즘 (패캠)

(52)
1759번: 암호만들기 (백트래킹) www.acmicpc.net/problem/1759 1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net # 암호만들기 # https://www.acmicpc.net/problem/1759 (백트래킹) import re def recursive(chars, res, a="", idx=0): if len(a) == L: co = re.sub("[aeiou]", "", a) # 자음 vo = re.sub("[^aeiou]", "", a) # 모음 if len(co) >= 2 and len(vo) >= 1: res.appen..
1987번: 알파벳 (백트래킹) www.acmicpc.net/problem/1987 1987번: 알파벳 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으 www.acmicpc.net # 알파벳 # https://www.acmicpc.net/problem/1987 (백트래킹) # 방문경로가 다르면 재방문 가능하므로 방문리스트가 아니라 SET을 이용한다. def dfs(x, y, step): global result # if not visited[x][y]: # visited[x][y] = 1 if (x, y, step) not in queue: queue.add((x, y, step)..
9663번: N-Queen (백트래킹) www.acmicpc.net/problem/9663 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.net # N-Queen # https://www.acmicpc.net/problem/9663 (백트래킹) # N이 4일때 [[1, 3, 0, 2], [2, 0, 3, 1]] 2개 경우가 있다 def check(a, row, col): for r, c in enumerate(a): if col == c or abs(col - c) == abs(row - r): return False return True def recursive(ro..
1781번: 컵라면 (탐욕) www.acmicpc.net/problem/1781 1781번: 컵라면 상욱 조교는 동호에게 N개의 문제를 주고서, 각각의 문제를 풀었을 때 컵라면을 몇 개 줄 것인지 제시 하였다. 하지만 동호의 찌를듯한 자신감에 소심한 상욱 조교는 각각의 문제에 대해 데드라 www.acmicpc.net # 컵라면 # https://www.acmicpc.net/problem/1781 (탐욕) import sys import heapq # problems: [(1, 6), (1, 7), (2, 4), (2, 5), (3, 2), (3, 1), (6, 1)] def run(N, problems): problems.sort(key=lambda x: x[0]) # ((데드라인 순서로 선택해서)) 문제를 푼다 solved = [..
1461번: 도서관 (탐욕) www.acmicpc.net/problem/1461 1461번: 도서관 첫째 줄에 책의 개수 N과, 세준이가 한 번에 들 수 있는 책의 개수 M이 주어진다. 둘째 줄에는 책의 위치가 주어진다. N은 10,000보다 작거나 같은 자연수이고, M은 10,000보다 작거나 같다. 책의 위치 www.acmicpc.net # 도서관 # https://www.acmicpc.net/problem/1461 (탐욕) def run(M, books): books.sort() # ((먼 책 순서로 선택해서)) 걸음수를 계산한다 books_right = [x for x in books if x > 0] books_left = [x for x in books if x < 0] max_walk = max(min(books) * ..
2212번: 센서 (탐욕) www.acmicpc.net/problem/2212 2212번: 센서 첫째 줄에 센서의 개수 N(1
1092번: 배 (탐욕) www.acmicpc.net/problem/1092 1092번: 배 첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보 www.acmicpc.net # 배 # https://www.acmicpc.net/problem/1092 (탐욕) # boxes : [8, 8, 4, 2, 2] # cranes : [ 6, 9, 8 ] # crane_queue: [[4, 2], [8, 2], [8]] def run(cranes, boxes): boxes.sort(reverse=True) # ((큰 박스 순서대로 선택해서)) 처리한다 crane_queue =..
2012번: 등수 매기기 (탐욕) www.acmicpc.net/problem/2012 2012번: 등수 매기기 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 500,000) 둘째 줄부터 N개의 줄에 걸쳐 각 사람의 예상 등수가 순서대로 주어진다. 예상 등수는 500,000 이하의 자연수이다. www.acmicpc.net # 등수 매기기 # https://www.acmicpc.net/problem/2012 (탐욕) import sys def run(N, pre_ranks): pre_ranks.sort() # ((예상 등수 순서로 선택해서)) 랭킹을 매긴다 res = 0 for i in range(N): rank = i + 1 res += abs(pre_ranks[i] - rank) return res N = int(input()) pr..