전체 글 39

[프로그래머스/python] Level 2 : 택배 배달과 수거하기

https://school.programmers.co.kr/learn/courses/30/lessons/150369?language=python3 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이 문제의 핵심은 멀리 있는 집부터 가야 최적의 동선이 나온다. 그리고 마지막 부터 보면서 거꾸로 하나씩 집을 더 갈 수 있는지 확인을 하는 것. 코드 def solution(cap, n, deliveries, pickups): d, p, answer = 0, 0, 0 for i in range(n-1, -1, -1): // 마지막 집부터 확인 d += delive..

[백준] 2512 예산(이분 탐색) - Python

https://www.acmicpc.net/problem/2512 2512번: 예산 첫째 줄에는 지방의 수를 의미하는 정수 N이 주어진다. N은 3 이상 10,000 이하이다. 다음 줄에는 각 지방의 예산요청을 표현하는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 값들은 모두 1 이상 www.acmicpc.net 6*n = int(input()) lst = list(map(int, input().split())) m = int(input()) end = max(lst) start = 1 # start 잡아주고 ans = 0 # 정답 변수 선언 while start mid: sum_num += mid else: sum_num += lst[i] if sum_num > m: end = mid - 1 # s..

[백준] 1740 거듭제곱(비트마스킹) - Python

https://www.acmicpc.net/problem/1740 1740번: 거듭제곱 3의 제곱수를 생각하자. 3의 0제곱, 3의 1제곱, 3의 2제곱, ... 은 순서대로 1, 3, 9, 27, ... 이 된다. 이를 바탕으로, 한 개 이상의 서로 다른 3의 제곱수의 합으로 표현되는 수를 생각할 수 있다. 예를 www.acmicpc.net n = int(input()) bin_num = bin(n) bin_num = bin_num[2:] # 이진수로 변환했기 때문에 0b 제거 ans = 0 for i in range(len(bin_num)): if bin_num[i] == "1": # 1이 있으면 temp = 3 ** (len(bin_num)-i-1) # 이진수로 따지면 3의 제곱자리임 ans += ..

[백준] 1052 물병(비트마스킹) - Python

https://www.acmicpc.net/problem/1052 1052번: 물병 지민이는 N개의 물병을 가지고 있다. 각 물병에는 물을 무한대로 부을 수 있다. 처음에 모든 물병에는 물이 1리터씩 들어있다. 지민이는 이 물병을 또 다른 장소로 옮기려고 한다. 지민이는 한 번 www.acmicpc.net n, k = map(int, input().split()) ans = 0 while True: one_cnt = bin(n).count("1") # n이진수로 변환 후 1개수 세기 if one_cnt > k: # 1개수가 더 많다면 n += 1 # n + 1 해주기 ans += 1 else: break print(ans) - 접근방식: 물을 합치려면 2의 배수들만 합칠 수 있으므로 이진수로 변환, 결국..

[백준] 1475 방 번호(구현) - Python

https://www.acmicpc.net/problem/1475 1475번: 방 번호 첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수이다. www.acmicpc.net lst = [0] * 10 ans = 0 st = input() for s in st: if s == "6" and lst[6] == 0 and lst[9] > 0: # 6일 때 9숫자 있으면 쓸 수 있다. lst[9] -= 1 elif s =="9" and lst[9] == 0 and lst[6] > 0: # 9일 때 6숫자 있으면 쓸 수 있다. lst[6] -= 1 elif lst[int(s)] == 0: # 숫자 없으면 하나씩 채워넣기 ans += 1 for i in range(len(ls..

[백준] 9012 괄호(문자열) - Python

https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net import sys input = sys.stdin.readline T = int(input()) # 입력된 T만큼 반복 for i in range(T): vps = input().rstrip() vps_stack = [] # vps 에 들어온 가로의 개수만큼 반복 for v in vps: # "(" 가 들어오면 리스트에 넣고 if v == "(": vps_stack..

[백준] 2961 도영이가 만든 맛있는 음식(브루트포스) - Python

https://www.acmicpc.net/problem/2961 2961번: 도영이가 만든 맛있는 음식 첫째 줄에 재료의 개수 N(1 ≤ N ≤ 10)이 주어진다. 다음 N개 줄에는 그 재료의 신맛과 쓴맛이 공백으로 구분되어 주어진다. 모든 재료를 사용해서 요리를 만들었을 때, 그 요리의 신맛과 쓴맛은 www.acmicpc.net n = int(input()) lst = [] ans = [] result = [] # 정답 담을 배열 for i in range(n): a, b = map(int,input().split()) # 입력 받고 lst.append([a,b]) def combi(cnt,ans): if cnt == n: # n번 됐으면 함수 종료조건 if ans: # 만약 정답배열에 담겼으면 mu..

[백준] 1094 막대기(비트마스킹) - Python

https://www.acmicpc.net/problem/1094 1094번: 막대기 지민이는 길이가 64cm인 막대를 가지고 있다. 어느 날, 그는 길이가 Xcm인 막대가 가지고 싶어졌다. 지민이는 원래 가지고 있던 막대를 더 작은 막대로 자른다음에, 풀로 붙여서 길이가 Xcm인 막대 www.acmicpc.net N = int(input()) # 입력 받고 ans = 0 for i in range(7): # 총 64가 최대니 6칸까지 밀어서 비트확인 if N & (1