Python 23

이제는 플레를 향해 (#11375)

#11375 열혈강호 https://www.acmicpc.net/problem/11375 처음엔 열심히 풀었다. 틀린 코드n, m = map(int, input().split())people = {x: [] for x in range(1, n + 1)}for i in range(1, n + 1): tmp = list(map(int, input().split())) if tmp[0]: people[i] = tmp[1:]works = [0] * (m + 1) # 인덱스 1부터 사용# print(people)def allocate(idx): # input() target = people[idx] if len(target): # 1. 가장 첫 번째 일에 연결..

두 개의 변량을 반영한 값을 만든다면 (#9251)

#9251 LCS https://www.acmicpc.net/problem/9251 아.. 그제 풀었던거 오늘 포스팅 하려니까 기억이 가물가물... 단순히 dfs로 풀었다.모든 경우의 수를 탐색하는 것이다. (브루트포스?) 그리고 역시나 메모리 초과를 맞이했다. 틀린 코드s1 = input().strip()s2 = input().strip()n1 = len(s1)n2 = len(s2)visited1 = [False] * n1visited2 = [False] * n2N = max(n1, n2)result1 = {x: [] for x in range(1, n1 + 1)}result2 = {x: [] for x in range(1, n1 + 1)}def dfs(depth, s, origin, n): if..

dp를 2차원으로 확장시켜야... (#12865)

#12865 평범한 배낭 https://www.acmicpc.net/problem/12865 과거 풀다가 해결을 못해서 버렸던 문제다.  틀린코드n, k = map(int, input().split())dp = [0] * (k + 1)obj = []for _ in range(n): w, v = map(int, input().split()) dp[w] = v obj.append([w, v])for i in range(k + 1): for w, v in obj: if i + w  왜 자꾸 틀릴까? 의문이었다..  근데 잘 생각해보니, 물품의 중복이 가능한 코드였다. 주어진 테스트케이스에서 극단적인 상황을 가정해보자.무게 1, 가치 100짜리 물건이 있다면 어떻게 될까이렇게,..

2년 전에 유기했던 DFS를 풀어.. (#1987)

#1987 알파벳 (https://www.acmicpc.net/problem/1987) 과거 소마를 준비하던 시절 포기했던 문제였다.    틀린 코드r, c = map(int, input().split())graph = [[x for x in input()] for _ in range(r)]alpha = set(graph[0][0])dr = [1, -1, 0, 0]dc = [0, 0, 1, -1]answer = 0def solve(x,y, length): global answer answer = max(answer, length) for i in range(4): nr = x + dr[i] nc = y + dc[i] if 0  무엇이 문제였을까?? 아..

구현 진짜 힘들다.... (#17144 미세먼지 안녕!)

#17144 미세먼지 안녕! https://www.acmicpc.net/problem/17144 17144번: 미세먼지 안녕! 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사 www.acmicpc.net 토요일에 시도했다가 포기하고 죽어있었다. 뭔가 잘못 구현한 부분이 있었는데 눈에 보이지 않았기 때문이다. 하지만 해결해냈다. 문제는 다음과 같았다. 먼지 데이터를 조금 더 효율적으로 관리하고 싶었다. 그래서 먼지의 위치를 저장한 리스트를 만들었었는데 공기청정기가 작동하게되면 먼지의 위치가 바뀐다. 이걸 반영을 안해줬기 때문에 문제가 발생했다. 이걸 파악한 뒤, 먼지의..

프로그래머스 고득점 kit 풀기 #DFS/BFS

1. 타겟 넘버 dfs로 구현하면 된다. 내 코드 def solution(numbers, target): global answer answer = 0 def check(nums, depth, target): global answer if depth == len(nums): # 계산 후 타겟과 비교 if sum(nums) == target: answer += 1 # 카운트 return else: check(nums, depth+1, target) nums[depth] = -nums[depth] check(nums, depth+1, target) check(numbers, 0, target) return answer 베스트 코드 def solution(numbers, target): if not number..

취약점 극복하기 : 힙

자료구조 - 힙 (heap) : 여러 개의 값 중에서 가장 크거나 작은 값을 빠르게 찾기 위해 만든 이진트리. (Heap Tree) 영어단어 heap은 쌓아올린 더미를 의미한다. 상위 노드의 값은 항상 하위 노드보다 크거나 작아야하는 규칙이 있다. 클 경우 -> 최대 힙 (Max Heap) 작을 경우 -> 최소 힙(Min Heap) 이런 특성은, 우선순위 큐 (priority queue)를 만드는데 주로 사용된다. 데이터의 삽입과 삭제의 시간복잡도가 O ( log N ) 인 만큼 최댓값, 최솟값 탐색에 유용하게 사용된다. 힙을 직접 구현하는 작업도 언젠가 필요한 일이지만 당장에 다음주 주말 코딩테스트가 급하기 때문에 지금은 python 라이브러리를 활용한 방법을 중심으로 알아보자. 파이썬 라이브러리 이름..

때론 머리를 비우기도 하기 (실버2)

#15658번 연산자 끼워넣기 (2) https://www.acmicpc.net/problem/15658 15658번: 연산자 끼워넣기 (2) 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1보다 크거나 같고, 4N보다 작거나 같은 4개의 정수가 주어지는데, 차례대 www.acmicpc.net 자꾸 복잡하게만 생각하는게 내 흠인 것 같다. 간결한 코드도 좋지만 조금은 편하게 쉽게 생각할 필요가 있다. N = int(input()) nums = list(map(int, input().split())) cals = list(map(int, input().split())) # +, -, *, / ..

뇌가 돌아오는중 (그리디, 브루트포스)

제주 여행을 다녀왔다. (2/7~2/9) 운전을 너무 많이하고 술과 커피에 쩔어있다보니 여행이 끝난 후 3일을 내리 잠만 잤다 (하루 10시간) 너무 피곤해서 계속 브론즈만 풀다가 오늘 드디어 골드를 풀었다! (뇌가 풀렸다는 뜻. 아마도) 그리디와 브루트포스에 대해 알아보자 Greedy (그리디) : 탐욕스러운, 욕심많은 매 순간 최적의 상황만을 쫓아 최종적인 해답에 도달하는 방법이다. Brute Forde (브루트 포스) : 무식한, 힘 가능한 모든 경우의 수를 탐색하면서 요구조건에 충족되는 결과만을 가져온다. 예외 없이 100% 확률로 정답만을 출력한다. #1339 단어수학 https://www.acmicpc.net/problem/1339 1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ..

난생 처음 풀어본 골드2 (뚝배기 깨짐)

#2250번 트리의 높이와 너비 https://www.acmicpc.net/problem/2250 2250번: 트리의 높이와 너비 첫째 줄에 노드의 개수를 나타내는 정수 N(1 ≤ N ≤ 10,000)이 주어진다. 다음 N개의 줄에는 각 줄마다 노드 번호와 해당 노드의 왼쪽 자식 노드와 오른쪽 자식 노드의 번호가 순서대로 주어진다. www.acmicpc.net 생각보다 어려운 문제가 아니라서 놀랬다. 난이도가 높아질수록 코드의 길이가 길어지는 듯 하다 그냥 조금씩 차분히 해나가면 된다. 아직은 내 머릿속에 있는 논리를 코드로 구현하는 능력이 많이 부족한 듯 하다. 더 많은 경험이 필요함을 느꼈다. import sys # 재귀 제한 설정 sys.setrecursionlimit(100000) input = ..

728x90