programmers 20260429
This commit is contained in:
parent
346727ddac
commit
e703906afa
25
code_study/programmers/과일 장수/problem.txt
Normal file
25
code_study/programmers/과일 장수/problem.txt
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
과일 장수가 사과 상자를 포장하고 있습니다.
|
||||||
|
사과는 상태에 따라 1점부터 k점까지의 점수로 분류하며, k점이 최상품의 사과이고 1점이 최하품의 사과입니다.
|
||||||
|
사과 한 상자의 가격은 다음과 같이 결정됩니다.
|
||||||
|
|
||||||
|
한 상자에 사과를 m개씩 담아 포장합니다.
|
||||||
|
상자에 담긴 사과 중 가장 낮은 점수가 p (1 ≤ p ≤ k)점인 경우, 사과 한 상자의 가격은 p * m 입니다.
|
||||||
|
과일 장수가 가능한 많은 사과를 팔았을 때, 얻을 수 있는 최대 이익을 계산하고자 합니다.
|
||||||
|
(사과는 상자 단위로만 판매하며, 남는 사과는 버립니다)
|
||||||
|
예를 들어, k = 3, m = 4, 사과 7개의 점수가 [1, 2, 3, 1, 2, 3, 1]이라면,
|
||||||
|
다음과 같이 [2, 3, 2, 3]으로 구성된 사과 상자 1개를 만들어 판매하여 최대 이익을 얻을 수 있습니다.
|
||||||
|
(최저 사과 점수) x (한 상자에 담긴 사과 개수) x (상자의 개수) = 2 x 4 x 1 = 8
|
||||||
|
사과의 최대 점수 k, 한 상자에 들어가는 사과의 수 m, 사과들의 점수 score가 주어졌을 때,
|
||||||
|
과일 장수가 얻을 수 있는 최대 이익을 return하는 solution 함수를 완성해주세요.
|
||||||
|
|
||||||
|
제한사항
|
||||||
|
3 ≤ k ≤ 9
|
||||||
|
3 ≤ m ≤ 10
|
||||||
|
7 ≤ score의 길이 ≤ 1,000,000
|
||||||
|
1 ≤ score[i] ≤ k
|
||||||
|
이익이 발생하지 않는 경우에는 0을 return 해주세요.
|
||||||
|
|
||||||
|
입출력 예
|
||||||
|
k m score result
|
||||||
|
3 4 [1, 2, 3, 1, 2, 3, 1] 8
|
||||||
|
4 3 [4, 1, 2, 2, 4, 4, 4, 4, 1, 2, 4, 2] 33
|
||||||
9
code_study/programmers/과일 장수/solution.swift
Normal file
9
code_study/programmers/과일 장수/solution.swift
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import Foundation
|
||||||
|
|
||||||
|
func solution(_ k:Int, _ m:Int, _ score:[Int]) -> Int {
|
||||||
|
let sort: [Int] = score.sorted(by: >)
|
||||||
|
return stride(from: m - 1, to: sort.count, by: m).reduce(0){ $0 + sort[$1] * m }
|
||||||
|
}
|
||||||
|
|
||||||
|
print(solution(3, 4, [1, 2, 3, 1, 2, 3, 1])) // 8
|
||||||
|
print(solution(4, 3, [4, 1, 2, 2, 4, 4, 4, 4, 1, 2, 4, 2])) // 33
|
||||||
12
code_study/programmers/소수 만들기/problem.txt
Normal file
12
code_study/programmers/소수 만들기/problem.txt
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다.
|
||||||
|
숫자들이 들어있는 배열 nums가 매개변수로 주어질 때,
|
||||||
|
nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
|
||||||
|
|
||||||
|
제한사항
|
||||||
|
nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
|
||||||
|
nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
|
||||||
|
|
||||||
|
입출력 예
|
||||||
|
nums result
|
||||||
|
[1,2,3,4] 1
|
||||||
|
[1,2,7,6,4] 4
|
||||||
38
code_study/programmers/소수 만들기/solution.swift
Normal file
38
code_study/programmers/소수 만들기/solution.swift
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
import Foundation
|
||||||
|
|
||||||
|
func solution(_ nums:[Int]) -> Int {
|
||||||
|
guard let MAX = nums.max() else { return -1 }
|
||||||
|
|
||||||
|
let maxLimit: Int = 3 * MAX - 3
|
||||||
|
|
||||||
|
var isPrime: [Bool] = Array(repeating: true, count: maxLimit + 1)
|
||||||
|
isPrime[0] = false
|
||||||
|
isPrime[1] = false
|
||||||
|
|
||||||
|
for n in 2...Int(sqrt(Double(maxLimit))) {
|
||||||
|
if isPrime[n] {
|
||||||
|
for i in stride(from: n * 2, through: maxLimit, by: n) {
|
||||||
|
isPrime[i] = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var ans: Int = 0
|
||||||
|
let count: Int = nums.count
|
||||||
|
|
||||||
|
for i in 0 ..< count - 2 {
|
||||||
|
for j in i+1 ..< count - 1 {
|
||||||
|
for k in j+1 ..< count {
|
||||||
|
let sum: Int = nums[i] + nums[j] + nums[k]
|
||||||
|
if isPrime[sum] {
|
||||||
|
ans += 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ans
|
||||||
|
}
|
||||||
|
|
||||||
|
let nums: [Int] = [1,2,7,6,4]
|
||||||
|
print(solution(nums))
|
||||||
Loading…
x
Reference in New Issue
Block a user