본문 바로가기
코딩테스트

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

by liz_devel 2025. 12. 22.

🗒 문제

 


📝 나의 문제풀이

class Solution {
    fun solution(s: String): String {
        return s.toList()
                .groupingBy{ it }.eachCount()
                .filter{ it.value == 1 }
                .keys
                .sorted()
                .joinToString("")
        
    }
}

📝 다른 사람의 문제 풀이

다른 사람의 문제 풀이는 좋아요 수가 높거나 많은 사람들이 푼 방법 기준으로 첨부하였습니다.

class Solution {
    fun solution(s: String) = s.toSet()
        .filter { uniqueChar ->
            s.count { it == uniqueChar } == 1
        }.sorted().joinToString("")
}

🖊 문제 풀이 시 알면 좋을 것

 

  • s.toList()
    • 문자열 → 문자 리스트 변환
    • 예: "hello" → ['h','e','l','l','o']
  • groupingBy { it }
    • 그룹화 틀을 만든다
    • 문자별로 그룹을 만들어서 나중에 집계 가능
  • eachCount()
    • 각 그룹의 요소 개수를 Map으로 반환
    • 예: ['h','e','l','l','o'] → {h=1, e=1, l=2, o=1}
  • filter { it.value == 1 }
    • 등장 횟수가 1인 문자만 남김
    • 위 예제 → {h=1, e=1, o=1}
  • keys
    • Map의 키 값만 가져오기
    • Set 형태 → ['h','e','o']
  • sorted()
    • 사전 순으로 정렬
    • ['e','h','o']
  • joinToString("")
    • 리스트 → 문자열
    • "eho"
  • s.toSet()
    • 문자열 → 중복 제거된 문자 집합
    • 예: "hello" → ['h','e','l','o'] (l은 한 번만 남김)
  • filter { uniqueChar -> s.count { it == uniqueChar } == 1 }
    • 각 문자(uniqueChar)가 문자열 전체에서 1번만 등장하는지 확인
    • s.count { it == uniqueChar } → 해당 문자의 등장 횟수
    • 등장 1회만 남김

toSet()

  • 중복 제거용 함수
  • 컬렉션이나 문자열에서 같은 요소를 한 번만 남기고 Set으로 변환
  • 반환 타입: Set<T> (순서 보장 X)
val s = "hello"
val uniqueChars = s.toSet()
println(uniqueChars) // 출력 예: [h, e, l, o]  ('l' 중복 제거)

 

문자열 "hello" → 문자 'l'이 중복 → Set으로 만들면 한 번만 남음

 

Set<T>란?

  • 중복 없는 컬렉션(Collection)
  • 순서를 보장하지 않음 (LinkedHashSet 같은 예외는 있음)
  • 리스트(List)와 달리 같은 요소를 여러 번 넣을 수 없음
특징 설명
중복 제거 같은 값이 여러 번 들어와도 1번만 남음
순서 보장 X 넣은 순서와 상관없이 요소를 저장
컬렉션 함수 지원 filter, map, count 등 대부분의 컬렉션 함수 사용 가능

 


 

count { 조건 }

설명

  • 컬렉션이나 문자열 순회하면서 조건에 맞는 요소 개수 세기
  • 조건이 없으면 전체 요소 개수 반환

예제 1: 조건 없이

val list = listOf(1, 2, 3, 4)
println(list.count()) // 4 → 전체 요소 수

 

예제 2: 조건과 함께

val s = "hello"
val cntL = s.count { it == 'l' }
println(cntL) // 2 → 'l' 문자가 2번 등장

 

내부 처리 과정:

  • 문자열 순회 → 각 글자가 'l'인지 확인 → 맞으면 카운트 +1 → 최종 반환

 

반응형