[Kotlin] 중복 문자열 확인 알고리즘

2023. 5. 21. 21:36·알고리즘/알고리즘
반응형

문제

문자열이 주어졌을 때, 이 문자열에 같은 문자가 중복되어 등장하는지 확인하는 알고리즘을 작성하라

 

문제 풀기 전 확인 사항

  • 문자열이 ASCII인지 아니면 유니코드인지 확인 필요
  • 공백은 

 

문제 풀이1 : Map 자료 구조를 사용한 문제 해결

풀이

만약 문자열이 유니코드로 인코딩되어 있다면, 최대 4바이트이기 때문에 Map 자료 구조를 사용하는 것이 좋다. 

class Solution() {
    fun hasDuplicateCharacter(string : String) : Boolean {
        val map : MutableMap<Char, Boolean> = mutableMapOf()
        for(char in string) {
            char.code
            if(map[char] == true) return true
            else map[char] = true
        }
        return false
    }
}

 

복잡도

문자열의 길이가 N이라고 했을 때 시간 복잡도와 공간 복잡도는 다음과 같다. 

Time Complexity : O(N)
Memory Complexity : O(N)
만약 N이 2^16보다 충분히 크다면 공간 복잡도는 O(1)이 된다.

 

문제 풀이2: Boolean Array를 사용한 문제 해결

풀이

만약 ASCII로 인코딩 되어있고 A-z만 사용한다면, 문자열은 최대 52개가 존재하기 때문에 다음과 같이 풀 수 있다.

A가 ASCII에서 값이므로 아래와 BooleanArray를 만든 다음 확인하는 방식으로. 푼다.

class Solution2() {
    fun hasDuplicateCharacter(string: String): Boolean {
        val usedArray = BooleanArray(52)
        val indexA = 'A'.code
        for (char in string) {
            if(usedArray[char.code - indexA]) {
                return true
            }
            usedArray[char.code - 'A'.code] = true
        }
        return false
    }
}

 

복잡도

문자열의 길이가 N이라고 했을 때 시간 복잡도와 공간 복잡도는 다음과 같다.

Time Complexity : O(N)
Memory Complexity : O(1)
반응형

'알고리즘 > 알고리즘' 카테고리의 다른 글

[Kotlin] Matrix 90도 회전시키기 : Matrix Rotation  (0) 2023.05.27
[Kotlin] String 압축하기 : 반복되는 문자 압축하기  (0) 2023.05.26
[Kotlin] 두개의 String이 있다고 했을 때, 하나의 String에 대해 문자를 하나 이하로 추가하거나 지우거나 다른 값으로 바꾸었을 때 동일한지 확인  (0) 2023.05.25
[Kotlin] String이 Palindrome Permutation인지 확인하기  (0) 2023.05.24
[Kotlin] 공백을 "%20"으로 대체해 Url로 만들기  (0) 2023.05.23


'알고리즘/알고리즘' 카테고리의 다른 글
  • [Kotlin] String 압축하기 : 반복되는 문자 압축하기
  • [Kotlin] 두개의 String이 있다고 했을 때, 하나의 String에 대해 문자를 하나 이하로 추가하거나 지우거나 다른 값으로 바꾸었을 때 동일한지 확인
  • [Kotlin] String이 Palindrome Permutation인지 확인하기
  • [Kotlin] 공백을 "%20"으로 대체해 Url로 만들기
심플코드
심플코드
프로그래밍을 어렵지 않게 풀어서 설명하는 기술 블로그
    반응형
  • 심플코드
    심플코드
    심플코드
  • 전체
    오늘
    어제
    • 분류 전체보기 (96)
      • 안드로이드를 위한 Coroutines (2)
      • Unit Testing (19)
      • GitHub Actions (0)
      • 공식 문서 번역 (35)
        • Coroutines 공식 문서 (35)
      • 알고리즘 (7)
        • Kotlin 자료구조 (0)
        • 알고리즘 (7)
        • Kotlin으로 구현하는 자료구조 (0)
      • 코딩 테스트 (0)
      • Deep Learning (0)
      • Machine Learning Math (17)
        • Linear Algebra (17)
      • ML (0)
      • Docker (15)
      • Kubernetes (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 코틀린 코루틴의 정석 책 출간 소식
  • 인기 글

  • 태그

    Kotlin
    coroutine
    TensorFlow
    Machine Learning
    코루틴 Flow
    mockito
    unit testing
    numpy
    unit test
    Coroutines
    Coroutines Flow
    코루틴 채널
    Docker
    Coroutines Channel
    컨테이너
    junit
    코루틴
    도커
    pytorch
    Coroutines Context
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
심플코드
[Kotlin] 중복 문자열 확인 알고리즘
상단으로

티스토리툴바