본문 바로가기

프로그래밍/SWIFT

[Swift] Counter 구현하기 via codewars

반응형

codewars 를 풀다가 한줄짜리 카운터 구현이 있어서 옮겨본다. 한눈에 이해가 안 되서 옮겨보는 것임.

카운터라고 하면, 일련의 시퀀스 (리스트, 어레이로 주어진) 가 주어지고, 각각의 갯수를 세는 것을 말한다. python 에는 collections 에 Counter 라는 클래스를 간단히 이용하면 된다.

코드는 다음과 같다.

func counter(_ seq: [Int]) -> [Int:Int] {
  return Dictionary( seq.map { ($0, 1) }, uniquingKeysWith: +)
}

// ViacheslavTronewsky@codewars

딕셔너리는 두개짜리 튜플의 시퀀스를 받아서, 딕셔너리로 바꿔주는데, 중복되는 키가 있을 때 어떻게 처리할지를 결정하는 인자가 uniquingKeysWith 라는 인자. 중복되는 게 발견되면, 그 value 끼리 더하라고 했기 때문에 각 원소에 대한 카운트를 담는 카운터 딕셔너리가 만들어진다.

func counter(_ seq: [Int]) -> [Int:Int] {
  return Dictionary( seq.map { ($0, 1) }, uniquingKeysWith: +)
}

let cnt = counter([1,2,3,2,1,1,1,10,111])
print(cnt)
for (n, count) in cnt {
  print("\(n) - \(count)개")
}


// 실행결과
//
// [2: 2, 111: 1, 3: 1, 1: 4, 10: 1]
// 2 - 2개
// 111 - 1개
// 3 - 1개
// 1 - 4개
// 10 - 1개

 

728x90