본문 바로가기
알고리즘/프로그래머스

프로그래머스: 귤 고르기

by 패쓰킴 2023. 7. 16.
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

댓글