Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Swift 고차함수
- Associated Value
- Java
- 스위프트 클로저
- NSPredicates
- Swift closure
- 1009번
- Persistent store Coordinator
- leetcode #01
- Swift LinkedList
- Raw value and Associated value
- 일급 객체
- NSManagedObject SubClass
- NSSortDescriptor
- LightWeight Migration
- persistentStoreCoordinator
- expensive operation
- codability
- iOS Static Library
- 다익스트라 이해
- CoreData Stack
- CoreData Concurrency
- 트레일링 클로저
- Clean swift
- CoreData Filter
- dateFormatter
- Swift
- iOS Static Library 사용하는방법
- 2022 부스트캠프
- CoreData
Archives
- Today
- Total
하루를살자
2022 부스트캠프 자가진단 함수구현 문제 본문
문제
자연수가 들어있는 배열 arr가 매개변수로 주어집니다. 배열 arr안의 숫자들 중에서 앞에 있는 숫자들부터 뒤에 중복되어 나타나는 숫자들 중복 횟수를 계산해서 배열로 return 하도록 solution 함수를 완성해주세요. 만약 중복되는 숫자가 없다면 배열에 -1을 채워서 return 하세요.
▶입출력 예 #1
arr = [1, 2, 3, 3, 3, 3, 4, 4]에서 3은 4번, 4는 2번씩 나타나므로 [4, 2]를 반환합니다.
▶입출력 예 #2
arr = [3, 2, 4, 4, 2, 5, 2, 5, 5]이면 2가 3회, 4가 2회, 5가 3회 나타나므로 [3, 2, 3]를 반환합니다.
▶입출력 예 #3
[3, 5, 7, 9, 1]에서 중복해서 나타나는 숫자는 없으므로 [-1]을 반환합니다.
##### 제한사항
- 배열 arr의 길이는 1 이상 100 이하의 자연수입니다.
- 배열 arr의 원소는 1 이상 100 이하의 자연수입니다.
문제 요약
- 주어진 배열에 중복된 요소가 있다면 그 요소가 얼마나 많이 불렸는지 카운트 하고, 중복된 숫자들를 카운트한 갯수를 반환하는 함수를 만들어라.
- 이때 중복된 요소 순서대로 카운트 값을 반환해야한다.
문제 공략
자료구조
- 시간복잡도를 낮추려면 딕셔너리를 사용해서 사용하는게 좋을것같다.
- 주어진 배열의 순서를 기억하기 위한 방법을 찾아야할것같다.
접근방식
주어진 array 를 돌면서
valueIdentifingDict
value 값이 있는지 체크해준다.- 체크해주는 것으로, 배열에 중복된 요소가 있는지 없는지 체크할수있다.
- 중복된 요소가 없다면
valueIdentifingDict
의 값으로 배열의 인덱스를 지정해준다. - 중복된 요소가 있다면,
result
배열에 중복된 요소의 인덱스를 에 +1 해준다.
주어진 배열에 크기와 같은
result
배열을 초기값을 1로 가진채로 만든다. (중복 숫자는 카운트는 숫자한개 부터 1로 시작하기때문)마지막으로
result
중 1이상이 요소들만 걸러내는filter
작업을거치고, 빈 배열일시 [-1] 리턴.
func getDuplicatedOccurrence(arr: [Int]) -> [Int] {
var valueIdentifingDict:[Int: Int] = [:]
var result : [Int] = Array(repeating: 1, count: arr.count)
for (index, value) in arr.enumerated() {
if valueIdentifingDict[value] == nil {
valueIdentifingDict[value] = index
}else{
result[countDict[value]!] += 1
}
}
return result.filter({$0 > 1}).isEmpty ? [-1] : result.filter({$0 > 1})
}
'Algorithm Practices' 카테고리의 다른 글
프로그래머스 (최단거리), 다익스트라 이해하기 (0) | 2022.08.03 |
---|---|
[Swift] Binary Gap - Codability (0) | 2022.06.20 |
[Swift] LeetCode #01. Two Sum (0) | 2022.06.13 |
백준 1009 번 - 분산처리 (생각정리) (0) | 2022.01.05 |
Comments