https://school.programmers.co.kr/learn/courses/30/lessons/138476
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
변수 설정
- result: 빼야할 귤의 종류의 수
- needDelete: tangerine배열에 담긴 귤의 총 개수 - 상자에 넣을 귤의 개수
- array : 요소가 0을 tangerine의 최댓값만큼의 개수로 가지고있는 배열
- setK: 귤의 크기의 종류를 담은 중복이 없는 Set
- delete: 실제로 뺀 귤의 개수
나만의 풀이
1. 0을 요소를 tangerine의 최댓값만큼 개수로 가지는 array 배열을 만들었음
ex) tangerine이 [1,2,2,3,5] 면 최대값 5, 0이 5개 ,array = [0,0,0,0,0]
2. tangerine의 요소에 따라서 array index에 맞게 1씩 증가시킴
*이때 인덱스는 0부터니 array[tangerine[i] - 1]을 해줌
ex) tangerine이 [1,2,2,3,5] 면 array = [1,2,1,0,1]
3. 귤의 종류를 최소한으로 만드는 것이므로 어떤 종류를 삭제하는지 순서는 상관이 없음
무조건 최솟값의 종류로 만들고 싶은 것이기 때문에 array를 .sorted를 이용해 오름차순으로 정렬함
작은것 부터 최대한 지우기 위함
ex) array = [0,1,1,1,2]
4. array를 차례로 반복문을 이용해 돌면서 가장 적은 종류의 귤을 차례로 제거해 나아가면 됨
이때 array의 요소 중 0은 없는 종류의 귤이기 때문에 조건에 추가해야함
적은 종류의 귤을 필요한만큼 제거하면 result가 증가
더 이상 제거할 수 없을때는 else문을 통래해 return하게 됨
return Set을 이용해 귤의 총 종류 - 적은 귤을 가지는 종류들의 개수
-> 크기가 다른 종류의 최솟값을 얻을 수 있다.
import Foundation
func solution(_ k:Int, _ tangerine:[Int]) -> Int {
var result = 0
var needDelete = tangerine.count - k
var array = Array(repeating: 0, count: tangerine.max()!)
for i in 0..<tangerine.count{
array[tangerine[i] - 1] = array[tangerine[i] - 1] + 1
}
array = array.sorted(by: <)
var setK = Set<Int>()
for i in tangerine{
setK.insert(i)
}
var delete = 0
for i in 0..<array.count{
if array[i] != 0{
if array[i] + delete <= needDelete{
delete += array[i]
result += 1
}
else{
return setK.count - result
}
}
}
return 0
}
'Swift랑 친해지기 > programmers 풀기' 카테고리의 다른 글
[프로그래머스] 체육복 (Swift) (2) | 2022.12.12 |
---|---|
[프로그래머스] 할인 행사 (Swift) (0) | 2022.12.11 |
[프로그래머스] n^2 배열 자르기 (Swift) (2) | 2022.12.08 |
[프로그래머스] 소수 찾기(Swift) (2) | 2022.12.07 |
[프로그래머스] 튜플 (Swift) (0) | 2022.12.06 |