https://school.programmers.co.kr/learn/courses/30/lessons/120812
문제
문자열 my_string이 매개변수로 주어집니다. my_string에서 중복된 문자를 제거하고 하나의 문자만 남긴 문자열을 return 하도록 solution 함수를 완성해 주세요.
제한사항
1 ≤ my_string ≤ 110
my_string은 대문자, 소문자, 공백으로 구성되어 있습니다.
대문자와 소문자를 구분합니다.
공백(" ")도 하나의 문자로 구분합니다.
중복된 문자 중 가장 앞에 있는 문자를 남깁니다.
풀이
class Solution1 {
fun solution(my_string: String): String {
val map = mutableMapOf<Char, Boolean>(
'a' to false, 'b' to false, 'c' to false, 'd' to false, 'e' to false,
'f' to false, 'g' to false, 'h' to false, 'i' to false, 'j' to false,
'k' to false, 'l' to false, 'm' to false, 'n' to false, 'o' to false,
'p' to false, 'q' to false, 'r' to false, 's' to false, 't' to false,
'u' to false, 'v' to false, 'w' to false, 'x' to false, 'y' to false,
'z' to false,
'A' to false, 'B' to false, 'C' to false, 'D' to false, 'E' to false,
'F' to false, 'G' to false, 'H' to false, 'I' to false, 'J' to false,
'K' to false, 'L' to false, 'M' to false, 'N' to false, 'O' to false,
'P' to false, 'Q' to false, 'R' to false, 'S' to false, 'T' to false,
'U' to false, 'V' to false, 'W' to false, 'X' to false, 'Y' to false,
'Z' to false,
' ' to false
)
return my_string.filter {
if (!map[it]!!) {
map[it] = true
true
} else false
}
}
}
class Solution2 {
fun solution(my_string: String): String {
val arr1 = BooleanArray('z' - 'a' + 1)//소문자
val arr2 = BooleanArray('z' - 'a' + 1)//대문자
var b = false // 공백
fun solve(char: Char): Boolean {
if (char in 'a'..'z') {
if (!arr1[char - 'a']) {
arr1[char - 'a'] = true
return true
}
return false
} else if (char in 'A'..'Z') {
if (!arr2[char - 'A']) {
arr2[char - 'A'] = true
return true
}
return false
} else {
if (!b) {
b = true
return true
}
return false
}
}
return my_string.filter { solve(it) }
}
}
- 해당 문제를 2가지 방법으로 풀어 보았습니다.
- 1번 풀이의 경우 map을 이용하여 값들을 채크하며 filtering을 하였고 2번 풀이 같은 경우 불린 배열을 이용하여 필터링을 하였습니다.
- 이 2가지 풀이를 통해 볼 수 있는 것은 map과 배열의 차이였습니다. 배열 같은 경우 index를 이용하여 해당값에 바로 접근할 수 있지만 map 같은 경우 해당 key의 유무를 검색하는 과정에서 속도차이가 납니다. 만약 이문자열이 모든 문자가 포함될 수 있는 문자열이었다면 map을 사용하여 접근을 하는 것이 좋았겠지만 지금같이 범위가 정해져 있고 작은 경우에는 배열이 최적화면에서 더 좋아 보입니다.
결과
'코틀린 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] - 인덱스 바꾸기 (1) (Kotlin) (0) | 2023.07.27 |
---|---|
[프로그래머스] - 대문자와 소문자 (Kotlin) (0) | 2023.07.27 |
[프로그래머스] - 문자열 정렬하기 (1) (Kotlin) (0) | 2023.07.26 |
[프로그래머스] - 최댓값 만들기 (1) (Kotlin) (0) | 2023.07.26 |
[프로그래머스] - 점의 위치 구하기 (Kotlin) (0) | 2023.07.25 |