본문 바로가기

파이썬알고리즘79

20210705#(60) 백준 11399 ATM (그리디) https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 책에서 그리디 문제들을 풀다보니 재밌어서 백준에서 풀어본 그리디문제.. 첫째 줄에 각 사람이 돈을 인출하는데 필요한 시간의 합의 최솟값을 출력한다. 가 조건인 문제이다. 그래서 만약 3 4 1 2 5가 입력되면 1 2 3 4 5 순서로 배치해야 더했을때 최소가 되는걸 확인할 수 있다. 위 1 2 3 4 5 로 배치했을때 계산 결과는 1 + (1+2) + (1+2+3) + (1+2+3+4) + (1+2+3+4+5) 이다. 내가 .. 2021. 7. 5.
20210705#(59) 책-이것이 취업을 위한 코딩 테스트다 with 파이썬 (그리디, 구현 총 4문제 풀이) 부서에 이것이 취업을 위한 코딩 테스트다 라는 책이 들어오게 돼서 야간 근무 때 한번 풀어봤다! 결국 책 주문신청하게 됨 그리디 풀고 구현풀다가 졸리기도 하고 집중이 안돼서 더 이상 풀지는 못했다.. 다음엔 더욱 많이 풀기 도전 # 이코테 큰 수의 법칙 그리디 1 counting=0 count=0 n,m,k=list(map(int,input().split())) num_list=list(map(int,input().split())) num_list.sort(reverse=True) for i in range(m): counting+=1 if counting==k: count+=num_list[1] counting=0 else: count+=num_list[0] print(count) # 이코테 숫자카드게.. 2021. 7. 5.
20210703#(58) 백준 10828번 스택 https://www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net dfs,bfs 를 풀기전 먼저 기본적인 자료구조 개념들을 흡수하기 위해 풀어봤다!.. 첨엔 코드 이해하는게 꽤 시간이 걸렸는데 보다보니까 간단한 코드였다. import sys N=int(sys.stdin.readline()) stack=[] for _ in range(N): word=sys.stdin.readline().split() #input으로 받게 되면 시간 초과 orde.. 2021. 7. 3.
20210703#(57) 백준 11727번 2 X n 타일링 2 (다이나믹 프로그래밍) https://www.acmicpc.net/problem/11727 11727번: 2×n 타일링 2 2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다. www.acmicpc.net n=int(input()) if n==1: print(1) else: dp=[0 for _ in range(n+1)] dp[1]=1;dp[2]=3 for i in range(3,n+1): if i%2==1: #홀수 dp[i]=((dp[i-2]*4)+1)%10007 else: #짝수 dp[i]=((dp[i-2]*4)-1)%10007 print(dp[n]) n이 1일때 for 문에서 index out of range가 뜬다는 사실.. 2021. 7. 3.
20210702#(56) 백준 1149번 RGB거리 (다이나믹 프로그래밍) https://www.acmicpc.net/problem/1149 1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net home=[] N=int(input()) for i in range(N): home.append(list(map(int,input().split()))) for i in range(1,N): home[i][0]=min(home[i-1][1],home[i-1][2])+home[i][0] home[i][1]=min(home[i-1][0],home[i-1][2])+home[i][1.. 2021. 7. 2.
20210702#(55) 프로그래머스 가장 큰 수 (정렬) https://programmers.co.kr/learn/courses/30/lessons/42746 코딩테스트 연습 - 가장 큰 수 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 programmers.co.kr 풀다가 답이 안나와서 구글링을 통해 제출했다... def solution(numbers): numbers=list(map(str,numbers)) numbers.sort(key=lambda x:x*3,reverse=True) return str(int(''.join(numbers))) 1. list.. 2021. 7. 2.
20210702#(54) 백준 2309 일곱 난쟁이 (브루트포스) https://www.acmicpc.net/problem/2309 2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net dwarf=[] for _ in range(9): dwarf.append(int(input())) dwarf_tall=sum(dwarf) breaker=False for i in range(8): for j in range(i+1,9): if (dwarf_tall-(dwarf[i]+dwarf[j]))==100: del dwarf[i];del dwarf[j-1] # list앞에서 하나가 빠졌기 때문에 j에서.. 2021. 7. 2.
20210701#(53) 백준 2231 분해합 (브루트포스) https://www.acmicpc.net/problem/2231 2231번: 분해합 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 www.acmicpc.net answer=0 def sol(n): for i in range(1,n+1): num_list=list(map(int,str(i))) #str함수를 이용해 각 자리 숫자를 num_list에 넣기 (ex 361 ->[3,6,1]) answer=i+sum(num_list) #분해합 공식 if answer==n: return i break if i==n: return 0 #.. 2021. 7. 1.
20210701#(52) 백준 2798 블랙잭 (브루트포스) https://www.acmicpc.net/problem/2798 2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net n,m=map(int,input().split()) card=list(map(int,input().split())) scoresum=0 for i in range(n): for j in range(i+1, n): for k in range(j+1, n): if card[i]+card[j]+card[k] > m: continue else: scoresum=max(sc.. 2021. 7. 1.