알고리즘을 공부하기 위해 프로그래머스 웹에서 중복된 문자 제거 라는 문제를 풀었다.
프로그래머스 중복된 문자 제거 👉 이동하기
Character 배열로 변환 하는 방법String 타입과 Character 타입은 비교연산이 안되는 것contains 메서드 가 무엇이고, 사용하는 방법Character 배열로 변환코드
func solution(_ my_string:String) -> String {
var string: String = "Hello, World!"
let stringArr = Array(string) // 문자열을 Character배열로 변환
var temp: [String] = [] // 중복 글자 저장 배열
for word in stringArr {
for i in 0...stringArr.count {
if word == stringArr[i] {
if temp[i] !== word {
temp.append(word)
}
}
}
}
let result = String(temp)
return result
}
결과: 에러 발생
Cannot convert value of type 'String.Element' (aka 'Character') to expected argument type 'String'
func solution(_ my_string:String) -> String {
let string = my_string
let stringArr = Array(string)
//let charArr = Array(string) // 문자열을 캐릭터 배열로 변환
//let stringArray = charArray.map { String($0) } // 다시 문자열 배열로 전환
var temp: [Character] = [] // 중복 글자 저장 배열
for word in stringArr {
for i in 0...stringArr.count {
if word == stringArr[i] {
if temp[i] != word {
temp.append(word)
}
}
}
}
let result = String(temp)
return result
}
temp[i] !== word 구문 에러 발생Fatal error: Index out of rangFatal error: Index out of rang 오류 방생contains 메서드 사용하여 중복 문자 확인func solution(_ my_string:String) -> String {
let string = my_string
let stringArr = Array(string) // 문자열을 캐릭터 배열로 변환
var temp: [Character] = [] // 중복 글자 저장 배열
for word in stringArr {
if !temp.contains(word) {
temp.append(word)
}
}
let result = String(temp) // Character 배열을 String 타입으로 변경
print(result)
return result
}

Cannot convert value of type 'String.Element' (aka 'Character') to expected argument type 'String'
String 타입과 Char 타입을 !== 비교 연산했다.String.Element(즉, Character)와 String의 타입 불일치word는 Character인데, temp는 [String]이므로 temp.append(word)에서 타입이 맞지 않아 오류가 발생temp 배열을 [Character]로 선언하여 해결temp[i]에서 i가 temp 범위 밖으로 벗어나서 생기는 오류로 보임for 문을 사용하여 비교를 하려고 해서 temp 배열에 대해 신경을 못썼다.temp 배열이 비어있는데, i의 값이 커지면서 Index out of rang 오류 발생index 값이 넘어가면 에러가 발생하는 것을 알게되었다.for 문 👉 contains 메서드로 변경contains 메소드는 배열안에 있는 특정 문자가 포함되어 있는지를 확인하는 메소드다.contains를 이용하여 중복 문자를 확인하는 로직으로 변경하여 해결 Array() 로 감싸준다.let string = "pppeplwkke"
let stringArr = Array(string)
String() 으로 감싸준다.let charArr: [Character] = ["a","b","c","d"]
let string = String(charArr)
map 함수를 사용하면 쉽게 변경할 수 있다.let stringArray = charArray.map { String($0) }
joined 를 사용하면 된다.let arr = ["Hi", "Jun"]
let str = arr.joined(separator: "")
contains는 컬렉션(Array, Set, Dictionary 등)에 특정 요소가 포함되어 있는지를 확인하는 메서드let country: [String] = ["korea", "usa", "uk"]
if country.contains("korea") {
print("포함되어 있습니다.")
}
1️⃣ String 과 Character 를 비교 연사자를 사용할 수 없다.
2️⃣ 배열의 index를 넘기면 오류가 발생한다.
3️⃣ 내가 모르는 메소드들이 많다.
4️⃣ 메소드를 잘 사용하면 코드가 간결해진다.
👉 앞으로도 알고리즘 공부를 열심히 해서 간결하고 쉽게 코드를 설계하는 습관을 길러야겠다. 🚀