[Kotlin] 공백을 "%20"으로 대체해 Url로 만들기

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

문제

문자열에 들어았는 모든 공백을 %20으로 바꾸기. %20으로 바꾸었을 때만큼의 크기를 가진 문자열(String 혹은 CharArray)과, 실제 문자열의 크기(size)가 주어진다.

 

문제 풀기 전 확인 사항

1. input은 String인가 아니면 CharArray인가?

 

문제 풀이1

input이 String이라고 가정하면, 아래와 같이 풀 수 있다.  Kotlin의 String은 Immutable 하기 때문에, String에서 CharArray를 가져오려면 새로운 CharArray를 할당해야 하므로 아래와 같이 새로운 공간을 할당해야 한다.

class Solution() {
    fun urlify(input: String, size: Int): String {
        var charArrayIndex = 0
        val charArray = CharArray(input.length)
        var index = 0

        for (char in input) {
            if (index == size) break
            if (char == ' ') {
                charArray[charArrayIndex] = '%'
                charArray[charArrayIndex + 1] = '2'
                charArray[charArrayIndex + 2] = '0'
                charArrayIndex += 3
            } else {
                charArray[charArrayIndex] = char
                charArrayIndex += 1
            }
            index += 1
        }
        return String(charArray)
    }
}

 

복잡도

size가 N이라 했을 때 

시간 복잡도: O(N) - 한 번만 for문을 돌면 되므로

공간 복잡도: O(N) - 최대 3N만큼의 공간이 생성되므로 

 

 

문제 풀이2

input이 CharArray라고 한다면, 아래와 같이 풀 수 있다. 실제 문자 크기인 size를 사용해 CharArray에서 마지막 문자열부터 하나씩 처리해서 채워나가는 방식으로 처리한다.

class Solution2() {
    fun urlify(input: CharArray, size: Int): CharArray {
        var currentIdx = input.size - 1

        for (index in size - 1 downTo 0) {
            val value = input[index]
            if (value == ' ') {
                input[currentIdx] = '0'
                input[currentIdx - 1] = '2'
                input[currentIdx - 2] = '%'
                currentIdx -= 3
            } else {
                input[currentIdx] = value
                currentIdx -= 1
            }
        }

        return input
    }
}

 

 

복잡도

size가 N이라 했을 때 

시간 복잡도: O(N) - 한 번만 for문을 돌면 되므로

공간 복잡도: O(1) - 추가 공간을 사용하지 않았으므로

 

테스트 케이스

  • 양쪽에 문자가 있는 케이스
  • 모두 공백인 케이스
  • 한쪽만 공백인 케이스
fun main() {
    val solution = Solution2()
    println(solution.urlify("Mr Dev Cho    ".toCharArray(), 10))
    println(solution.urlify("         ".toCharArray(), 3))
    println(solution.urlify("A   ".toCharArray(), 2))
}

 

반응형

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

[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] 중복 문자열 확인 알고리즘  (0) 2023.05.21


'알고리즘/알고리즘' 카테고리의 다른 글
  • [Kotlin] String 압축하기 : 반복되는 문자 압축하기
  • [Kotlin] 두개의 String이 있다고 했을 때, 하나의 String에 대해 문자를 하나 이하로 추가하거나 지우거나 다른 값으로 바꾸었을 때 동일한지 확인
  • [Kotlin] String이 Palindrome Permutation인지 확인하기
  • [Kotlin] 중복 문자열 확인 알고리즘
심플코드
심플코드
프로그래밍을 어렵지 않게 풀어서 설명하는 기술 블로그
    반응형
  • 심플코드
    심플코드
    심플코드
  • 전체
    오늘
    어제
    • 분류 전체보기 (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)
  • 블로그 메뉴

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

  • 공지사항

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

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
심플코드
[Kotlin] 공백을 "%20"으로 대체해 Url로 만들기
상단으로

티스토리툴바