백준(25)
-
[백트래킹] 스타트와 링크
오랜만에 백준 포스팅을 한다. 천천히 진행되던 백트래킹이 드디어 끝났다. 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 -
[정렬] 수 정렬하기(?)
2750번: 수 정렬하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 두 가지 방법으로 풀었는데, 나름 참신하다고 생각한 방법이 python 내장 정렬이랑 시간이 비슷하게 걸려서 놀랐다. 아래 104ms가 걸린 방법은 기존 정렬 알고리즘이랑 다르게 풀어보고 싶어서 내 나름대로 생각해서 해본 방식이다. length = int(input()) EMPTY = "EMPTY" dummy = [EMPTY] * 2001 for i in range(length): num = int(input()) + 1000 dummy[num] = num resul..
2021.05.30