본문 바로가기
📖 Coding Test/Programmers LV.0

[프로그래머스 LV.0] 한 번만 등장한 문자

by hyebin (Helia) 2023. 1. 10.

한 번만 등장한 문자

문제 설명

문자열 s가 매개변수로 주어집니다. s에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록 solution 함수를 완성해 보세요. 한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.

제한 사항

  • 0 < s의 길이 < 1,000
  • s는 소문자로만 이루어져 있습니다.

입출력 예

s result
"abcabcadc" "d"
"abdc" "abcd"
"hello" "eho"

입출력 예 설명

입출력 예 #1

  • "abcabcadc"에서 하나만 등장하는 문자는 "d"입니다.

입출력 예 #2

  • "abdc"에서 모든 문자가 한 번씩 등장하므로 사전 순으로 정렬한 "abcd"를 return 합니다.

입출력 예 #3

  • "hello"에서 한 번씩 등장한 문자는 "heo"이고 이를 사전 순으로 정렬한 "eho"를 return 합니다.

제출

import Foundation

func solution(_ s:String) -> String {
    var alphabet = [String: Int]()
    
    for i in s.map{String($0)}{
        alphabet[i ,default: 0] += 1
    }
    
    return alphabet.filter{$0.value == 1}.keys.sorted(by: <).joined()
}
알파벳을 key로 갖고 등장 횟수를 value로 갖는 딕셔너리 변수 alphabet을 선언한다.
입력받은 문자열을 배열로 변환해 각 알파벳을 alphabet 변수에 넣고, value를 1씩 증가시킨다.
filter함수를 사용해 value가 1인 (1번만 등장한 경우) key들을 구하고, 정렬한 후 joined 함수를 사용해 String 형으로 반환한다.

다른 풀이

import Foundation

func solution(_ s: String) -> String {
    return Dictionary(grouping: Array(s).map(String.init), by: { $0 }).filter { $0.value.count <= 1 }
        .keys
        .sorted(by: <)
        .joined()
}
입력받은 문자열을 배열로 변환해 각 요소 값을 기준으로 딕셔너리형으로 grouping 한다.
filter 함수를 사용해 value의 개수가 1 이하인 key를 구한 후, 정렬하고 joined 함수를 사용해 String 형으로 반환한다.
반응형

댓글