본문 바로가기

python3/백준문제풀이11

[백준/python3] 2231_분해합(brute force) def d(n) : # 분해합 구하는 함수 만들기 d(245) a = n + sum(map(int, str(n))) # 256 = 245 + 2 + 4 + 5 return a # 256 출력 N = int(input()) # 입력칸 Nlist = list(range(N+1)) # 입력 받은 숫자까지의 리스트 생성 for i in Nlist : # Nlist를 돌며 하나씩 확인해줄 것임 if d(i) == N : # 위에 만들어 준 함수 d(i)가 N과 같을 경우 # 즉, N에 256 입력 # d(i)는 Nlist를 돌며 # 245 + 2 + 4 + 5 = 256에서 멈출 것임 # d(245) = 256 이 되므로 print(i) # 245 출력함 break if d(i) not in Nlist : # 만.. 2022. 1. 16.
[백준/python3] 11050_이항 계수 1 # 이항계수 : nCk 즉, n! / k!(n-k)! # 1. for문으로 풀기 - for문 3개 써서 코드가 조잡함 import sys n, k = map(int, sys.stdin.readline().split()) val_1 = 1 # n!을 구해주는 for문 for i in range(1, n+1) : val_1 *= i val_2 = 1 # k!을 구해주는 for문 for j in range(1, k+1) : val_2 *= j val_3 = 1 # (n-k)!을 구해주는 for문 for l in range(1,n-k+1) : val_3 *= l print(val_1//(val_2*val_3)) # 이항계수 식으로 print, ''' # 2. factorial 함수 ** 구글링 from math.. 2022. 1. 16.
[백준/python3] 10250_ACM 호텔 ''' 1~6등 : 101호~601호 7~12등 : 102호~602호 ... ''' import sys t = int(input()) for _ in range(t) : h, w, n = map(int, sys.stdin.readline().split()) x = (n // h) + 1 # 방 번호 x ## 6 x 12형 호텔 기준 10번 째 / 12번 째 손님일 때 ## 방 번호 x는 (10 // 6) + 1 = 2호 / (12 // 6) + 1 = 3호 y = (n % h) * 100 # 층수 y ## 층수 y는 (10 % 6) * 100 = 400호 / (12 % 6) * 100 = 0호 if n % h == 0 : # 위의 예시에서 12번째 손님은 값이 나누어 떨어질 때 반례가 생김 x = n /.. 2022. 1. 16.
[백준/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.
[백준/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.
[백준/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.