Python69 [Algorithm] 이코테 만들 수 없는 금액 | 파이썬 (그리디) [문제]동네 편의점의 주인인 동빈이는 N개의 동전을 가지고 있습니다. 이때 N개의 동전을 이용하여 만들 수 없는 양의 정수 금액 중 최솟값을 구하는 프로그램을 작성하세요.예를 들어, N=5 이고, 각 동전이 각각 3원, 2원, 1원, 1원, 9원짜리(화폐 단위) 동전이라고 가정합시다. 이때 동빈이가 만들 수 없는 양의 정수 금액 중 최솟값은 8원입니다.또 다른 예시로, N=3이고, 각 동전이 각각 3원, 5원, 7원 동전이라고 가정합시다. 이때 동빈이가 만들 수 없는 양의 정수 금액 중 최솟값은 1원입니다. [입력 조건]첫 째줄에는 동전의 개수를 나타내는 양의 정수 N이 주어집니다. (1≤N≤1,000)둘째 줄에는 각 동전의 화폐 단위를 나타내는 N개의 자연수가 주어지며, 각 자연수는 공백으로 구분합니다.. 2024. 6. 24. [Algorithm] 프로그래머스 체육복 | 파이썬 (그리디) ※ 42862 체육복https://school.programmers.co.kr/learn/courses/30/lessons/42862?language=python3 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제 해결 TIP우선, 제한 사항 중 여벌 체육복을 가져온 학생이 도난당한 경우를 고려한 경우를 정리해준다. 이후 나눠줄 수 있는 앞 뒤 번호와 도난당한 학생의 번호를 비교하여 한 명씩 제외한다. 마지막으로, 남아있는 도난당한 학생 수를 전체에서 빼준다. 앞 번호부터 순차적으로 나눠주는 것이 중요함으로 정렬을 이용한다. 전체 코드def solution.. 2024. 6. 24. [Algorithm] 프로그래머스 무지의 먹방 라이브 | 파이썬 (2019 KAKAO BLIND RECRUITMENT) ※ 42891 무지의 먹방 라이브https://school.programmers.co.kr/learn/courses/30/lessons/42891?language=python3 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제 해결 TIP재귀함수와 if, for 문으로 구현하려 했지만 생각보다 까다로운 조건들이 많았다. 우선순위 큐를 활용하여 쉽게 구현할 수 있다. 시간이 적게 걸리는 음식부터 전체 시간 k에서 빼가며 순차적으로 계산해야 한다. 소요 시간과 음식 번호를 같이 저장하고 우선순위를 위해 heapq 모듈을 사용한다. 전체 코드import heapq.. 2024. 6. 24. [Algorithm] 파이썬 정렬, lambda 사용 우선 파이썬에서 sort()와 sorted() 함수를 통해 정렬을 할 수 있다.sort() 원본 자체를 정렬시켜 준다.a = [1,5,2,7]a.sort() print(a)#a = [1,2,5,7] sorted() 원본을 변형시키지 않고 새로운 list를 반환한다.a = [1,5,2,7]b = sorted(a)print(a)print(b)#a = [1,5,2,7]#b = [1,2,5,7] reverse 정렬 기능은 기본적으로 오름차순으로 제공한다. 내림차순으로 정렬하고 싶은 경우, reverse 파라미터를 통해 정렬할 수 있다.a = [1,5,2,7]a.sort(reverse=True)print(a)#a = [7,5,2,1] key 정렬 조건을 설정할 함수를 넣을 수 있다.a = ['love','i','.. 2024. 6. 20. [Algorithm] 백준 1931 회의실 배정 | 파이썬 ※ 1931 회의실 배정https://www.acmicpc.net/problem/1931 문제 해결 TIP처음에는 회의 시간이 짧은 순서대로 배정을 하려 했지만, 그렇게 되면 시각 시간과 끝나는 시간을 고려하지 못하여 비효율적이다. 회의를 최대한 많이 하기 위해서는 최대한 회의가 빨리 끝나야하므로 끝나는 시간을 오름차순으로 정렬하여 배정해야한다. 전체 코드N = int(input())data = []count = 1for i in range(N): a,b = map(int,input().split()) data.append([a,b])data.sort(key=lambda x:(x[1],x[0]))end = data[0][1]for i in range(1,N): if data[i][0]>.. 2024. 6. 20. [Algorithm] 백준 11047 동전 0 | 파이썬 ※ 11047 동전 0https://www.acmicpc.net/problem/11047 문제 해결 TIP거스름돈 문제와 로직은 비슷하다. 가지고 있는 동전의 종류를 리스트에 내림차순으로 담은 후, 하나씩 나눠가며 총액에서 뺀다. 전체 코드N, K = map(int,input().split())data = []result = 0for i in range(N): data.append(int(input()))data.sort(reverse=True)for i in data: result += K//i K = K - (K//i)*iprint(result) 2024. 6. 20. [Algorithm] 백준 2839 설탕 배달 | 파이썬 ※ 2839 설탕 배달https://www.acmicpc.net/problem/2839문제 해결 TIP나올 수 있는 경우의 수는 총 4가지이다. 5로 나누어 떨어지는 경우, 3으로 나누어 떨어지는 경우, 3과 5의 조합으로 나누어 떨어지는 경우, 나누어 떨어지지 않는 경우. 처음에는 모든 경우의 수를 if else 문으로 하려 했지만, 조금 더 효율적인 방법을 생각해보았다. 우선 N을 5로 나누어보고 나누어 떨어지지 않는다면 3만큼 한번씩 뺴본 후 다시 5로 나누어보는 방법이다. 이렇게 로직을 짜면 모든 경우를 만족할 수 있게 된다. 전체 코드N = int(input())result = 0while N>=0: if N%5==0: result += N//5 print(resu.. 2024. 6. 20. [Algorithm] 백준 11399 ATM | 파이썬 ※ 11399 ATMhttps://www.acmicpc.net/problem/11399 문제 해결 TIP최소 시간의 합을 구하기 위해서는 우선 돈을 뽑는 시간 리스트를 오름차순으로 정렬해야 한다. ex) 1, 2, 3, 3, 4그렇다면 1은 5명 모두에게 해당되는 시간이므로 전체시간에 1*5을 더해주고, 2는 4명에게 해당되는 시간이므로 2*4, 3*3, 3*2, 4*1을 순차적으로 더해주면 된다. 전체 코드N = int(input())data = list(map(int,input().split()))data.sort()result = 0for i in range(len(data)): result += data[i]*(N-i)print(result) 2024. 6. 20. [Algorithm] Backtracking(백트래킹) 순열 및 조합 구현하기 itertools 우선 순열과 조합의 차이를 알아보자. 순열 : 원소들의 순서를 고려하여 나열하는 것 (원소의 순서가 다르면 다른 순열로 취급) 조합 : 원소들의 순서를 고려하지 않고 나열하는 것 (선택된 원소의 순서는 고려되지 않음) 파이썬 라이브러리 중 하나인 itertools를 사용하면 조합과 순열을 쉽게 구할 수 있다. from itertools import permutations, combinations arr = [1,2,3] k = 2 npr = list(permutations(arr, 2)) # [(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)] ncr = list(combinations(arr, 2)) # [(1, 2), (1, 3), (2, 3)] 그러나.. 라이브러리.. 2024. 4. 13. 이전 1 ··· 3 4 5 6 7 8 다음