목록python (158)
컴공생의 다이어리
백준 2512번 : 예산 (문제 바로가기) 내 코드 import sys input = sys.stdin.readline n = int(input()) # 지방의 수 arr = list(map(int, input().split())) # 예산 요청 m = int(input()) # 총 예산 start, end = 0, max(arr) while start = mid: # 요청한 금액이 상한액 이상이라면 curr += mid # 상한액 더하기 else: # 상한액 미만이라면 curr += i # 요청한 금액 더하기 if curr
백준 2015번 : 수들의 합 4 (문제 바로가기) 내 코드 import sys input = sys.stdin.readline n, k = map(int, input().split()) arr = list(map(int, input().split())) # 배열 데이터 sum_dict = {0: 1} # 누적합 관련 dict sum_val = 0 # 누적합 answer = 0 # 합이 K인 부분합의 개수 for i in arr: sum_val += i if sum_val - k in sum_dict.keys(): # 현재까지의 누적합에서 k를 뺀 값이 sum_dict에 있다면 answer += sum_dict[sum_val - k] # answer에 해당하는 값의 value만큼 더하기 # sum_dic..
백준 17352번 : 여러분의 다리가 되어 드리겠습니다! (문제 바로가기) 내 코드 import sys input = sys.stdin.readline def find_parent(parent, x): # 이어진 섬의 대표 섬 찾기 if parent[x] != x: parent[x] = find_parent(parent, parent[x]) return parent[x] def union(parent, a, b): # 섬 잇기 a = find_parent(parent, a) b = find_parent(parent, b) if a < b: parent[b] = a else: parent[a] = b n = int(input()) # 섬의 수 parent = [i for i in range(n + 1)] ..
백준 1654번 : 랜선 자르기 (문제 바로가기) 내 코드 import sys input = sys.stdin.readline # k : 이미 가지고 있는 랜선의 개수, n : 필요한 랜선의 개수 k, n = map(int, input().split()) lan_cable = [int(input()) for _ in range(k)] answer = 0 # 랜선의 최대 길이 start, end = 1, max(lan_cable) while start = n: # 랜선의 개수가 n이상이면 start = mid + 1 answer = mid else: # 랜선의 개수가 n미만이면 end = mid - 1 print(answer)
[프로그래머스] 짝지어 제거하기 - 파이썬(Python) from collections import deque def solution(s): temp = deque() for i in range(len(s)): if temp and temp[-1] == s[i]: temp.pop() else: temp.append(s[i]) return 0 if temp else 1 https://programmers.co.kr/learn/courses/30/lessons/12973 코딩테스트 연습 - 짝지어 제거하기 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙 program..
[프로그래머스] 예상 대진표 - 파이썬(Python) def solution(n, a, b): answer = 0 while a != b: answer += 1 a, b = (a + 1) // 2, (b + 1) // 2 # +1을 한 뒤 2로 나눈 몫을 저장하는 이유는 # a, b가 홀수이건 짝수이건 1을 더해서 몫으로 나누면 # 다음 라운드의 번호를 구할 수 있음 return answer https://programmers.co.kr/learn/courses/30/lessons/12985 코딩테스트 연습 - 예상 대진표 △△ 게임대회가 개최되었습니다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 그리고, 1번↔2번, 3번↔4번,..
[프로그래머스] 폰켓몬 - 파이썬(Python) def solution(nums): return min(len(nums) // 2, len(set(nums))) https://programmers.co.kr/learn/courses/30/lessons/1845 코딩테스트 연습 - 폰켓몬 당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다. programmers.co.kr
[프로그래머스] 전력망을 둘로 나누기 - 파이썬(Python) from collections import defaultdict, deque def bfs_and_node_count(del_line, n, wire_dict): # bfs 수행과 연결된 노드수 구하기 count = 1 # 연결된 노드 수 visited = [False] * (n + 1) # 방문여부 체크 visited[del_line[0]] = True # 시작 노드 방문 처리 queue = deque([del_line[0]]) while queue: # bfs 수행 curr = queue.popleft() for i in wire_dict[curr]: # curr 노드와 연결된 노드에 대해서 if visited[i] or i == del_..
[프로그래머스] 피로도 - 파이썬(Python) from itertools import permutations def solution(k, dungeons): answer = 0 len_dungeons = len(dungeons) for permu in permutations(dungeons, len_dungeons): # 순열로 경우를 만들어줌 temp_k = k # k는 그대로 보존하기 위해 temp_k를 k로 초기화 하고 사용 count = 0 # 던전 수 for p in permu: if temp_k >= p[0]: # 최소 필요 피로도가 있는지 확인 temp_k -= p[1] # 소모 피로도 빼주기 count += 1 # 던전 수 업데이트 answer = max(answer, count) # 최..
백준 12761번 : 돌다리 (문제 바로가기) 내 코드 from collections import deque # a, b : 스카이 콩콩의 힘 # n : 동규의 현재 위치 # m : 주미의 현재 위치 a, b, n, m = map(int, input().split()) dp = dict() # 각 돌의 최소 이동 횟수 dp[n] = 0 queue = deque([n]) # n에서 시작 while queue: # bfs 수행 curr = queue.popleft() for i in {1, -1, a, -a, b, -b}: # +1칸, -1칸, +A칸, -A칸, +B칸, -B칸 이동 val = curr + i if 0