목록Python (138)
나의 개발일지
문제 : https://www.acmicpc.net/problem/1927 🔑 최소 힙 from heapq import heappop, heappush import sys input = sys.stdin.readline n = int(input()) heap = [] for _ in range(n): x = int(input()) if not heap and x == 0: print(0) elif x > 0: heappush(heap, x) else: print(heappop(heap))
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/77885 🔑 2진수로 변환해서 자리 바꾸기 짝수라면 그 숫자에 +1을 해서 정답에 추가한다. 홀수라면 숫자를 2진수로 바꾸고 50자리까지 남는 자리에 0을 채워준다. (10^15를 2진수로 바꾸면 50자리까지 나와서) 변환된 2진수를 역순으로 순회하면서 처음 0을 만나면 1로 바꿔주고, 바로 오른쪽 값은 0으로 바꿔준다. 7 일 때 2진수로 바꾸면 000...0111 처음 0으로 만났을 때 값을 바꿔주면 000...1011 이렇게 자리를 바꾼 2진수를 다시 10진수로 변환해서 정답에 추가하면 끝 ✨ def solution(numbers): answer = [] for n in numbers:..
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/42884 🔑 그리디, 정렬 나간 지점을 기준으로 오름차순 정렬 [[-20, -15], [-14, -5], [-18, -13], [-5, -3]] → [[-20, -15], [-18, -13], [-14, -5], [-5, -3]] 초기값(camera)을 -30000보다 작은 값으로 초기화한다. 현재 차량의 진입 지점이 카메라가 설치된 지점(camera) 보다 크면 나간 지점에 카메라 설치 밑에 그림으로 봤을 때 카메라를 설치한 지점과 겹치지 않는 경우에 해당 그림을 보면 이해하기 쉽다. 빨간 막대가 카메라가 설치된 자리 파란 막대는 차량이 이동한 거리 def solution(routes): ..
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/12987 🔑 정렬 A의 순서가 어떻든 간에 B의 순서를 내 마음대로 배치할 수 있으니까 둘 다 오름차순으로 정렬을 한다. (A의 순서가 주어진 대로 사용할 필요 없음) A보다 B[i]가 더 크면 정답 올리고 A의 다음 순서를 불러온다. 반복 한 번만 하면 끝 ✨ def solution(A, B): answer = 0 A.sort() B.sort() p = 0 for i in range(len(A)): if A[p] < B[i]: answer += 1 p += 1 return answer
문제 : https://www.acmicpc.net/problem/16496 🔑 숫자를 모두 10자리로 맞추기 3 = 3333333333 30 = 3030303030 34 = 3434343434 5 = 5555555555 9 = 9999999999 정렬하면 9999999999, 5555555555, 3434343434, 3333333333, 3030303030 이렇게 10자리로 맞추고 내림차순 정렬을 한 후 원래 숫자들을 출력하면 끝 ✨ n = int(input()) nums = input().split() sort_list = [] for n in nums: new_num = n * 10 # 문자열 10번 반복해서 최소 10자리 이상으로 만들기 sort_list.append((int(new_num[:1..
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/131704 🔑 스택 1번부터 나열된 박스(i)를 스택에 담는다. 스택의 맨 위 박스가 택배 기사가 원하는 박스면 빼서 트럭에 담는다. 원하는 박스가 아니면 다음 박스 담으러 이동 def solution(order): answer = 0 stack = [] # 보조 컨베이어 벨트 i = 1 while i < len(order)+1: stack.append(i) # 보조 컨베이어 벨트에 i번 박스 담음 while stack[-1] == order[answer]: # 보조 컨베이어 벨트 맨 위 박스가 택배 기사가 원하는 박스면 answer += 1 # 트럭에 담음 stack.pop() # 보조 컨..
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/154538 🔑 BFS 6번 테스트 케이스 계속 통과 안 된 이유 🤬 x == y 일 때 0번 만에 만들 수 있다. 트리를 defaultdict를 사용해 기본 값을 0으로 둔다. 큐에 x를 넣어놓고 bfs를 진행 현재 큐에 있는 값으로 x + n, x * 2, x * 3을 해본다. y를 넘어가면 건너뛰고 아니면 계산된 수에 현재 깊이 +1을 한다. 계산된 수를 큐에 넣는다. bfs 종료 후 tree[y]의 값을 리턴한다. (0이면 -1 리턴) from collections import defaultdict, deque def solution(x, y, n): if x == y: return 0..
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/132265 🔑 누적합을 두 번 사용 왼쪽에서 오른쪽으로 누적합 (li1) 오른쪽에서 왼쪽으로 누적합 (li2) li1[i] == li2[i+1] 이면 answer 1 증가 def solution(topping): answer = 0 dic1 = {} dic2 = {} for t in topping: dic1[t] = False dic2[t] = False li1 = [0] * len(topping) li2 = [0] * len(topping) li1[0], li2[-1] = 1, 1 dic1[topping[0]], dic2[topping[-1]] = True, True for i in ran..