Programmers
-
6.예산Programmers 2023. 6. 14. 06:56
문제 설명 S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 없습니다. 그래서 최대한 많은 부서의 물품을 구매해 줄 수 있도록 하려고 합니다. 물품을 구매해 줄 때는 각 부서가 신청한 금액만큼을 모두 지원해 줘야 합니다. 예를 들어 1,000원을 신청한 부서에는 정확히 1,000원을 지원해야 하며, 1,000원보다 적은 금액을 지원해 줄 수는 없습니다. 부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원할 수 있는지 return 하도록 solution 함수를 완성해주세요. 제한사항 d는 부서별로 신청한 ..
-
5. 피보나치 수Programmers 2023. 6. 14. 06:38
문제 설명 피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다. 예를들어 F(2) = F(0) + F(1) = 0 + 1 = 1 F(3) = F(1) + F(2) = 1 + 1 = 2 F(4) = F(2) + F(3) = 1 + 2 = 3 F(5) = F(3) + F(4) = 2 + 3 = 5 와 같이 이어집니다. 2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요. (n은 2이상 100000 이하의 자연수) 해당 문제는 다이나믹 프로그래밍의 전형적인 유형이라고 생각해서 풀었었다. def solution(n): d = [0]*1000..
-
4. 최솟값 만들기Programmers 2023. 6. 13. 16:34
문제 설명 길이가 같은 배열 A, B 두개가 있습니다. 각 배열은 자연수로 이루어져 있습니다. 배열 A, B에서 각각 한 개의 숫자를 뽑아 두 수를 곱합니다. 이러한 과정을 배열의 길이만큼 반복하며, 두 수를 곱한 값을 누적하여 더합니다. 이때 최종적으로 누적된 값이 최소가 되도록 만드는 것이 목표입니다. (단, 각 배열에서 k번째 숫자를 뽑았다면 다음에 k번째 숫자는 다시 뽑을 수 없습니다.) 예를 들어 A = [1, 4, 2] , B = [5, 4, 4] 라면 A에서 첫번째 숫자인 1, B에서 첫번째 숫자인 5를 뽑아 곱하여 더합니다. (누적된 값 : 0 + 5(1x5) = 5) A에서 두번째 숫자인 4, B에서 세번째 숫자인 4를 뽑아 곱하여 더합니다. (누적된 값 : 5 + 16(4x4) = 21..
-
3. 숫자의 표현Programmers 2023. 6. 13. 16:26
문제 설명 Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다. 1 + 2 + 3 + 4 + 5 = 15 4 + 5 + 6 = 15 7 + 8 = 15 15 = 15 자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요. 제한사항 n은 10,000 이하의 자연수 입니다. 제약식을 한 번 고려해보자. 연속된 자연수끼리의 합은 결국 초항이 a이고 등차가 1인 k개의 원소를 가진 등차수열의 합을 더하는 것과 같다. - a + (a+ 1) + (a + 2) + ... + (a +..
-
-
3진법 뒤집기Programmers 2023. 5. 8. 23:06
문제 설명 자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수입니다. 입출력 예 n result 45 7 125 229 입출력 예 설명 입출력 예 #1 답을 도출하는 과정은 다음과 같습니다. n (10진법) n (3진법) 앞뒤 반전(3진법) 10진법으로 표현 45 1200 0021 7 따라서 7을 return 해야 합니다. 입출력 예 #2 답을 도출하는 과정은 다음과 같습니다. n (10진법) n (3진법) 앞뒤 반전(3진법) 10진법으로 표현 125 11122 22111 229 따라서 229를 return 해야 합니다. 나의 풀이..
-
[Algorithm] 여러 정렬 알고리즘Programmers 2023. 5. 2. 00:12
정렬 데이터를 특정한 기준에 따라 순서대로 나열하는 것 Selection Sort 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸고, 그다음 작은 데이터를 선택해 앞에서 두 번째 데이터와 바꾸는 과정을 반복 array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] for i in range(len(array)): min_index = i for j in range(i+1, len(array)): if array[min_index] > array[j]: min_index = j array[i], array[min_index] = array[min_index], array[i] # Python Swap Code print(array) 이 예제 코드에서 Swap 코드를 주목하자. Pytho..
-
[알고리즘] DFS와 BFSProgrammers 2023. 4. 21. 08:35
탐색이란 많은 양의 데이터 중 원하는 데이터를 찾는 과정을 의미한다. 프로그래밍의 측면에서는 그래프, 트리 등의 자료구조 안에서 탐색을 하는 문제를 다룬다. 대표적인 탐색 알고리즘으로 DFS와 BFS가 있는데, 이 알고리즘들의 원리를 제대로 이해해야 코딩 테스트의 탐색 문제 유형을 풀 수 있다. 알고리즘을 공부하기 위해 필요한 자료구조 개념들 LIFO , Last In First Out 스택 한쪽만 뚫려있는 구조. 삽입과 추출이 한쪽에서만 진행 push : 스택에 데이터를 넣는 작업 pop : 스택에서 데이터를 꺼내는 작업 가장 윗 부분 : top, 가장 아랫부분: bottom FIFO, First In First Out 큐 한쪽에서는 데이터 삽입만, 다른 한쪽에서는 데이터 추출만 진행 enQueue :..