[Swift] [14일차] 귤고르기

·2024년 12월 21일
0

SwiftAlgorithm

목록 보기
17/105

Programmers-귤 고르기

swift딕셔너리 정렬 방법

var sortedDictionary = a.sorted { $0.1 > $1.1 }

이런식으로 해주니까 다음처럼 튜플형태? 처럼 바꼈는데 이걸 원한건 아니었다.

[(key: 3, value: 2), (key: 5, value: 2), 
(key: 2, value: 2), (key: 4, value: 1), (key: 1, value: 1)]

VALUE값으로 정렬을 하면서 그 키 값만 배열로 담아주고 싶었다(순서대로)

좀 더 서칭을 해본 결과 다음과 같이 해결을 할 수 있었다. 그냥 map써서 키값만 뽑아주면 되었었다.

var sortedDictionary = a.sorted { $0.1 > $1.1 }.map { $0.key }
[5: 2, 4: 1, 3: 2, 1: 1, 2: 2]

[5, 3, 2, 4, 1]

순서대로 5 ,3, 2, 4, 1 순서대로 잘 배열로 나타내진 것을 볼 수 있다.
이제 이걸 반복문 돌리면서 참조로 활용한다음 귤의 갯수가 target에 맞춰질 때까지 돌리면된다.

import Foundation

func solution(_ k: Int, _ tangerine: [Int]) -> Int {
    var a: [Int: Int] = [:]

    for tang in tangerine {
        a[tang, default: 0] += 1
    }
    var sortedDictionary = a.sorted { $0.1 > $1.1 }.map { $0.key }

    var count = 0
    var categoryCount = 0
    for item in sortedDictionary {
        count += a[item]! // 귤 갯수 더해주기
        categoryCount += 1
        if count >= k {
            break
        }
    }
    return categoryCount
}

채점 결과

정확성: 100.0
합계: 100.0 / 100.0


타인의 코드

import Foundation

func solution(_ k:Int, _ tangerine:[Int]) -> Int {
    var map = [Int: Int]()
    tangerine.forEach { map[$0, default: 0] += 1 }

    var idx = 0, sum = 0

    for tanger in map.sorted { $0.value > $1.value } {
        sum += tanger.value; idx += 1
        if sum >= k { break }
    }

    return idx
}

엄청 유사한 것 같았다.

  1. var sortedDictionary = a.sorted { $0.1 > $1.1 }.map { $0.key } 이렇게 따로 선언을 해주고 거기서 반복문을 돌린 반면 이분은
    for tanger in map.sorted { $0.value > $1.value } 이렇게 걍 한줄로서 한번에 해준것이 좀 차이가 있었고 더 간결해서 좋은 것 같았다.

  2. 추가로 배운거는

 for tang in tangerine {
        a[tang, default: 0] += 1
    }

default로 없으면 0 해주는걸 아예 내장된 기능으로 활용할 수 있다는 거 터득할 수 있었다.

  1. 아까 튜플같은 형태로 나온다고 불평한 것을 이분은 그냥 바로 화룡해서 .value 이런식으로 더 쉽게 처리해준 게 좀 인상깊었다. 나는 억지로 변수로 할당하고 해주느라 귤 갯수를 구할 때 count += a[item]! // 귤 갯수 더해주기 이렇게 억지로 item이 없을때에 대비하는 것 때문에 강제 언래핑을 해주었는데, 다음부터는 나온대로 좀 활용해야겠다 싶었다.
profile
기억보단 기록을

0개의 댓글