백준(30)
-
[동적 계획법] 피보나치 함수
백 트래킹이 마무리가 되고 동적 계획법으로 넘어왔다. 동적 계획법 자체는 거창한 내용은 없었고, 값을 재활용한다는 핵심 개념만 알고 가면 될 것 같다. 값을 저장하고 꺼내오는 과정에서의 최적화에 대한 고민이 중요할 것 같다. 1003번: 피보나치 함수 각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다. www.acmicpc.net from sys import stdin T = int(stdin.readline()) f_arr = [-1] * 41 f_arr[0] = [1, 0] f_arr[1] = [0, 1] def f(n: int): global f_arr if f_arr[n] != -1: return f_arr[n] else: [z1, o1] = f(n - 1..
2021.09.12 -
[백트래킹] 스타트와 링크
오랜만에 백준 포스팅을 한다. 천천히 진행되던 백트래킹이 드디어 끝났다. 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net from sys import stdin from itertools import combinations as cb N = int(stdin.readline()) ARR = [] def get_team_status(team_list: list): total = 0 global ARR for x, y in cb(team_list, 2): total = total + ARR[x - 1][y - 1] + ARR[y - 1..
2021.08.30 -
[백트래킹] N과M(4)
15652번: N과 M (4) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net n과m 시리즈를 전부 포스팅 할 필요는 없을 것 같아서 바로 4로 넘어왔다. 파이썬 문법이 간결해서 좋은데, 솔직히 삼항 연산자는 가독성도 그렇고 뭔가 마음에 안 든다... 자바나 자바스크립트처럼 cond ? a : b 하면 얼마나 좋아... 어차피 syntax sugar인데 짧게 하지.... 문제 자체는 별거 없었다. 재귀함수는 명료한 exit조건이 관건인데 항상 똑 부러지게 바로 결정을 못 하고 긴가민가 하다... N, M = map(int, (input()..
2021.07.18 -
[백트래킹] N과M(1)
15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열 = NpM 이니까 파이썬에 내장된 순열과 조합 구현 가능한 라이브러리가 있더라;; 너무 편해... from itertools import permutations as pm N, M = map(int, (input()).split()) for i in pm(list(map(lambda x: x + 1, range(N))), M): print(*i) ''' def get_result_recursive(pre:..
2021.07.18 -
[정렬] 단어 정렬
1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 입력받은 단어들을 1. 짧은 순 2. 사전 순 으로 정렬하면 된다. 짧은순으로 정렬한 후 그 안에서 사전순으로 정렬하려고 하면 복잡해진다. 그냥 1. 사전 순 2. 짧은 순 으로 순서대로 정렬하면 조건에 만족하게 된다. from sys import stdin N = int(stdin.readline()) words: set = set() for i in range(N): word = str(stdin.readline()).replace('\n', ""..
2021.07.18 -
[정렬] 수 정렬하기2
2751번: 수 정렬하기 2 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 내장메소드 써버리기 파이썬의 간결함은 정말... 충격적이다 from sys import stdin length = int(stdin.readline()) for i in sorted([int(stdin.readline()) for s in range(length)]): print(i)
2021.06.04