본문 바로가기

파이썬10

[백준/python3] 2839_설탕 배달(DP, Greedy) ''' # 5로 무조건 나누기 # 5로 안 나눠지면 3씩 빼주기 # 무조건 5kg 봉지를 들고가는 게 전체 봉지 수를 줄일 수 있음 # cnt 값 바꿔주기 ''' n = int(input()) # n 킬로그램 설탕 입력 cnt = 0 # 개수 0으로 초기화 while n >= 0 : # n 킬로그램이 0 이상일 경우에만 나누어줄 것임 if n % 5 == 0 : # n을 5로 나눈 나머지가 0이면 cnt += n // 5 # 바로 cnt에 n을 5로 나눈 정수 몫을 더해주고 print(cnt) # 개수를 출력해줌 break # break 무조건 있어야 함! elif n % 5 != 0 : # n%5가 0이 아니면 n -= 3 # n을 3씩 줄이면서 5의 배수로 맞춰줌 # 5kg 봉지로 들고갈 수 있는 건.. 2022. 1. 16.
[백준/python3] 23351_물 주기(Greedy) ''' # 1. 일직선으로 N개 화분, 초기 K만큼의 수분 # 3 3 3 3 3 3 # 연속된 A개의 화분에 물 줄 때 수분 B만큼씩 증가 # 연속된 2개의 화분이 수분 2씩 증가 # 5 5 3 3 3 3 # 모든 화분 수분 1씩 감소 # 4 4 2 2 2 2 # 수분이 0된 화분 죽고, 최대한 오래 사는 게 목표 # 매일 다른 연속된 화분에 물 줘서 최대한 살아남게 해야 함 ''' ''' 첫째 날 : 5 5 3 3 3 3 -> 4 4 2 2 2 2 둘째 날 : 4 4 4 4 2 2 -> 3 3 3 3 1 1 셋째 날 : 3 3 3 3 3 3 -> 2 2 2 2 2 2 넷째 날 : 4 4 2 2 2 2 -> 3 3 1 1 1 1 다섯째 날 : 3 3 3 3 1 1 -> 2 2 2 2 0 0 // brea.. 2022. 1. 16.
[python 문법] 리스트 쪼개기 및 for문을 이용한 combinations 백준 문제를 풀다가, 리스트를 내가 원하는 갯수대로 쪼개는 방법을 알고 싶어 이것저것 해봤습니다. 1. for문과 append로 만들기 arr = [1, 2, 3, 4, 5, 6] n = 2 div_li = [] for i in range(0, len(arr), n) : div_li.append(arr[i:i+n]) print(div_li) ''' (출력) [[1, 2], [3, 4], [5, 6]] ''' 2. def 함수에서 yield로 만들기 arr = [1, 2, 3, 4, 5, 6] def div_li(l, n) : for i in range(0, len(l), n) : yield l[i:i+n] n = 2 result = list(div_li(arr, n)) print(result) '''(출.. 2022. 1. 16.
[백준/python3] 2798_블랙잭(brute force) import sys n, m = map(int, sys.stdin.readline().split()) cards = list(map(int, sys.stdin.readline().split())) cards.sort() ''' 카드를 오름차순으로 정렬. 밑에 break문을 써주었으므로, 마지막에 인덱스가 012, 013, 014 이런 식으로 돌아야 하는데 012에서 m보다 값이 커지면 k for문이 돌지 않음 정렬을 안 쓰려면 아래 break 대신 continue 써줄 것 단 continue를 쓰면 시간복잡도 O(n^3)을 다 돌게 되는데, 정렬한 후 break를 걸면 m 이상인 수가 된 순간부터 뒷부분 돌지 않아서 시간 복잡도 감소함 ''' cards_li = [] # 3장의 카드 합을 담는 리스트 f.. 2022. 1. 16.
[백준/python3] 2775_부녀회장이 될테야 ''' 0층 - 1호 : 1명 , 2호 : 2명, 3호 3명 1 / 3 1층의 3호에 살려면 0층 1호 1명, 2호 2명, 3호 3명 = 6명 2 / 3 2층의 3호에 살려면 1층 1호 1명, 2호 3명, 3호 6명 = 10명 ''' T = int(input()) # 테스트 케이스 입력창 for _ in range(T) : # 테스트케이스 만큼 k와 n의 입력창 생성 k = int(input()) # k층 n = int(input()) # n호 man = [i for i in range(1, n+1)] # n호에 사는 사람들을 구하기 위한 리스트 생성 # 1호에 사는 사람부터 n+1호에 사는 사람까지 세어줄 리스트 생성 for i in range(k) : # 모든 층 다 살펴보기 for j in rang.. 2022. 1. 16.
[python문법] int를 str로 바꿔서 출력하기 1. 한 줄 씩 쪼개서 출력하기 a = list(range(1,11)) for i in range(a) : # 일단 a에 저장된 값 하나씩 다 돌면서 보기 for j in str(a[i]) : a의 [i]번 값을 문자(str)로 출력 print(j) ''' 결과 1 2 3 4 5 6 7 9 1 # 10 이 1과 0으로 나눠서 출력됨 0 ''' 2. 리스트 그대로 출력해보기 a = list(range(1,11)) b = str(a) print(b[0]) ''' 결과 # 1이 나올 거라고 생각했는데 [ # a 리스트의 대괄호가 출력됨 ''' 3. 입력 받은 숫자를 문자로 쪼개서 더하기 (예시 : 75 = 7 + 5 = 12로 출력하기) def 함수로 만들어서 푼 문제 링크 백준_4673_셀프넘버 [백준/py.. 2022. 1. 15.
[백준/python3] 4673_셀프 넘버(brute force) ''' # d(75) = 75 + 7 + 5 = 87 # 이렇게 하려면 int로 받고 str로 쓰기 a = int(input()) b = str(a) print(b[0]) # 입력 : 867 # 출력 : 8 ''' # d(75) = 75 + 7 + 5 = 87 # 이걸 함수로 만들어야 함 def d(n) : # 셀프넘버 생성해주는 함수 만들기 n = n + sum(map(int, str(n))) # 이것저것 해보다가 sum(map(int, str(n)))이 된다는 것 찾음 - int로 받고 str로 쓰기 # 위 식을 해석하면, d(75) = 75 + (7 + 5) = 87이라는 뜻 return n # 문제의 설명대로 n에 저장하고 return numbers = list(range(1, 10001)) # .. 2022. 1. 15.
[python문법] input() vs sys.stdin 1. input() 파이썬 내장 함수 input -> 개행 문자 벗기고 -> 문자열로 변환 -> return 2. sys.stdin file object 입력 -> buffer에 저장 -> 읽기 : buffer에 저장하고 읽기만 하기 때문에 시간 감소함 * 입력 속도 비교 1. for line in sys.stdin nums = [] for line in sys.stdin : nums.append(line) print(nums) 숫자 한 줄씩 입력 / 결과 1 2 3 ...(중략) ['1\n', '2\n', '3\n'] ## 개행문자 함께 출력됨 # 참고 -- rstirp으로 개행문자 제거 nums = [] for line in sys.stdin : nums.append(line.rstirp()) ## .. 2022. 1. 13.