https://school.programmers.co.kr/learn/courses/30/lessons/138476
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
우선 딕셔너리에 귤 크기에 따른 개수를 넣어줬다 [귤 크기: 개수]
그리고 정렬해준 다음에 개수가 많은 귤부터 상자에 넣어줬다. 그래야 귤의 종류가 적어질 수 있으니까!
사실 시간초과가 조금 걱정되었지만 100,000이라 설마~ 하면서 일단 작성했다.
아리까리하다면 해보는 게 답이지!^^ 빠르게 구현해볼 수 있을 거 같아서 도전했다.
처음엔 문제를 잘못 이해해서 틀렸다. 뭐가 문제였냐면~
한 종류의 귤을 다 넣어야 하는줄 알았다!! 어쩜 이런 생각을....
첫 제출때 시간초과는 없길래 휴.. 이런 식으로 해도 되는구나~^_^
어쨌든 (상자에 들어간 귤의 개수 + 현재 귤의 개수의 값)이 k보다 크거나 같다면 answer += 1해 주고 끝냈다.
이 귤까지는 넣을 수 잇으므로~
아쉽게 배열의 원소의 개수를 value로 dictionary에 바로 넣으면서 바로 정렬하는 방식을 본 적이 있었는데
생각이 안 나서 그냥 쭉 코드를 작성했다. 이제 제출 성공했으니 다른 사람 코드를 확인해 봐야겠다!
[내 코드]
import Foundation
/*
수확한 귤 중 k개를 골라 상자에 담아 판매하려고 한다.
귤을 크기별로 분류했을 때, 서로 다른 종류의 수를 최소화하고 싶다.
귤의 종류의 수 최솟값은?
*/
func solution(_ k:Int, _ tangerine:[Int]) -> Int {
var answer = 0
var sum = 0
var dictionary = [Int:Int]()
for tan in tangerine {
dictionary[tan] = (dictionary[tan] ?? 0) + 1
}
let sortedDictionary = dictionary.sorted { t1, t2 in
return t1.value > t2.value
}
for tangerine in sortedDictionary {
if tangerine.value + sum >= k {
answer += 1
break
}
sum += tangerine.value
answer += 1
}
return answer
}
그런데 개인적으로 너무너무 많이 축약한 코드는 별로 안 좋아한다.. 실제 현직자들께서는 어떻게 생각하는지 모르겠지만...
오히려 헷갈려서 적당히 축약한 코드가 다른 사람들이 읽기도 좋다고 생각한다..^^..
func solution(_ k:Int, _ tangerine:[Int]) -> Int {
var answer = 0
var sum = 0
var dictionary = [Int:Int]()
tangerine.forEach { dictionary[$0] = (dictionary[$0] ?? 0) + 1 }
for tangerine in dictionary.sorted { return $0.value > $1.value } {
sum += tangerine.value
answer += 1
if sum >= k { break }
}
return answer
}
이렇게 코드를 리팩터링 해봤다! tangerine은 $0, $1을 사용해서 좀 더 간결하게 바꾸고,
sort 부분은 따로 상수/변수에 할당하지 않고 바로 for - in 문에서 사용하도록 했다. 그리고 for-in 문 내부의 코드도 정리해 줬다.
다시 보니 굳이 if문이 위에서 먼저 체크할 필요가 없다는 생각이 들었다. 중복코드라고 생각했다!
여기서 배열 값을 dictionary로 바꿔주는 부분에서 어떤 분은 이렇게 구현하셨다.
tangerine.forEach { map[$0, default: 0] += 1 }
default parameter가 있는지 몰랐다..!!!!!!@! default 부분에 key의 value값이 nil이면 0을 넣어주는 것 같다!
정말 놀라운 발견...
사실 아직 Apple Developer Document에서 Array 부분을 공부&정리하는 중이라서 Dictionary 부분은 아직 하지 못했는데
그래서 몰랐던 것 같다. 빨리 dictionary 부분도 공부하고 싶다!
재미있군...
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Swift] 주차 요금 계산 (0) | 2023.01.04 |
---|---|
[프로그래머스/Swift] 뉴스 클러스터링 (0) | 2023.01.04 |
[프로그래머스/Swift] n^2 배열 자르기 (0) | 2023.01.01 |
[프로그래머스/Swift] 튜플 (0) | 2022.12.29 |
[프로그래머스/Swift] 괄호 회전하기 (0) | 2022.12.29 |