728x90
https://school.programmers.co.kr/learn/courses/30/lessons/138476#qna
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
텐저린의 종류별로 k만큼 종류를 분류 했을 때 작은 값을 리턴하면 된다.(문제의 예제 그대로)
내가 생각한 방법은 종류별 개수를 [종류:개수] 딕셔너리를 만들어서 내림차순 정렬 시켜준 뒤,
제일 처음의 value 부터 k에서 빼주고 result에 1씩 더해준다.
k가 0 이거나 마이너스 값이 될 때 result를 리턴해주면 원하는 값을 만들 수 있다.
func solution(_ k:Int, _ tangerine:[Int]) -> Int {
var k = k
var tangerineCountDic = [tangerine[0]:0]
var result = 0
for i in 0 ..< tangerine.count {
if tangerineCountDic[tangerine[i]] == nil {
tangerineCountDic[tangerine[i]] = 1
} else {
tangerineCountDic[tangerine[i]]! += 1
}
}
let sortedTangerineDic = tangerineCountDic.sorted { $0.1 > $1.1 }
for i in 0 ..< sortedTangerineDic.count {
k -= sortedTangerineDic[i].value
result += 1
if k <= 0 {
return result
}
}
return 0
}
처음에는 위와 같이 코드를 실행 했더니 2문제가 시간 초과로 실패를 했다.
그래서 다른 사람들이 풀이를 봤는데 내가 풀이한 것과 다른게 없어 보여서 고민을 하다가
k -= sortedTangerineDic[i].value
컴파일러가 타입 추론시 직접 타입이 명시되어 있는것이 속도 면에서 더 빠르다고 했던게 생각이 나서
let tangerineValue = sortedTangerineDic[i].value
k -= tangerineValue
이렇게 수정한 뒤 다시 실행 해보니 이번에는 통과가 되었다.
처음 시도 했던 코드의 var tangerineCountDic = [tangerine[0]:0] 이 부분을 [Int:Int]()로 초기화 하니 처음 시도한 코드도 통과가 되었다.
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스: 2018 카카오 블라인드 채용 - [1차] 캐시 (0) | 2023.07.21 |
---|---|
프로그래머스: 과일 장수 (0) | 2023.07.20 |
프로그래머스: 멀리뛰기 (0) | 2023.07.12 |
프로그래머스: Summer/Winter Coding(~2018) - 점프와 순간이동 (0) | 2023.07.11 |
프로그래머스: 대충 만든 자판 (0) | 2023.07.08 |
댓글