본문 바로가기

전체 글263

[백준] 13904번 - 과제 (파이썬) # 과제 import heapq from collections import defaultdict N = int(input()) arr = defaultdict(list) for _ in range(N): dday, score = map(int, input().split()) arr[dday].append(score) q = [] answer = 0 now = max(arr.keys()) while 0 2022. 4. 9.
[백준] 9007번 - 카누 선수 (파이썬) # 카누 선수 import sys input = sys.stdin.readline T = int(input()) for _ in range(T): k, n = map(int, input().split()) arr = [] for _ in range(4): arr.append(list(map(int, input().split()))) one, two = set(), set() for idx in range(0, 4, 2): for x in arr[idx]: for y in arr[idx+1]: one.add(x+y) if idx == 0 else two.add(x+y) one = sorted(list(one)) two = sorted(list(two)) # 투포인터 result = 0 diff = sys... 2022. 4. 8.
[백준] 3151번 - 합이 0 (파이썬) # 합이 0 from bisect import bisect_left N = int(input()) arr = list(map(int, input().split())) arr.sort() answer = 0 for i in range(len(arr)-2): left, right = i+1, N-1 while left 0: right -= 1 else: if result == 0: if arr[left] == arr[right]: answer += right - left else: idx = bisect_left(arr, arr[right]) answer += right-idx+1 left += 1 pri.. 2022. 4. 8.
[프로그래머스] Lv2 - 2개 이하로 다른 비트 (파이썬) https://programmers.co.kr/learn/courses/30/lessons/77885 코딩테스트 연습 - 2개 이하로 다른 비트 programmers.co.kr def solution(numbers): answer = [] for x in numbers: x = int(x) # 7,8,9번 런타임 에러 문제의 입력 오류 arr = list('0'+bin(x)[2:]) index = ''.join(arr).rfind('0') arr[index] = '1' if x % 2 != 0: arr[index+1] = '0' answer.append(int(''.join(arr), 2)) return answer 풀이 1. 각 숫자마다 - 2진수로 바꾸고 맨 앞에 '0'을 추가 (슬라이싱 : bin을.. 2022. 4. 6.
[프로그래머스] Lv2 - 피로도 (파이썬) https://programmers.co.kr/learn/courses/30/lessons/87946 코딩테스트 연습 - 피로도 XX게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다. 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던 programmers.co.kr from itertools import permutations as perm def solution(k, dungeons): answer = 0 for order in list(perm(dungeons, len(dungeons))): answer = max(answer, enter_dungeons(order, k)) if answer == len(dung.. 2022. 4. 6.
[백준] 17951번 - 흩날리는 시험지 속에서 내 평점이 느껴진거야 (파이썬) # 흩날리는 시험지 속에서 내 평점이 느껴진거야 N, K = map(int, input().split()) arr = list(map(int, input().split())) answer = 0 left, right = 0, int(1e5)*20+1 while left = mid: group += 1 score = 0 # 다음 if group >= K: answer = mid left = mid+1 else: right = mid-1 print(answer) 이분탐색 1. 입력을 받는다. 출력은 최대 점수 (left와 right을 얻을 수 있는 점수로 설정) 2. left = 0, right = 최대 시험 점수 + 1 (N은 최대 10^5개, 각 점수는 최대 20점) 3. 이분탐색 - 점수가 mid 일 .. 2022. 4. 6.
[프로그래머스] Lv2 - 배달 (파이썬) https://programmers.co.kr/learn/courses/30/lessons/12978 코딩테스트 연습 - 배달 5 [[1,2,1],[2,3,3],[5,2,2],[1,4,2],[5,3,1],[5,4,2]] 3 4 6 [[1,2,1],[1,3,2],[2,3,2],[3,4,3],[3,5,2],[3,5,3],[5,6,1]] 4 4 programmers.co.kr import heapq import sys def solution(N, road, K): answer = 0 arr = [[]for _ in range(N+1)] for a, b, time in road: arr[a].append((time, b)) arr[b].append((time, a)) visited = [sys.maxsize] .. 2022. 4. 5.