23.08.02 SWIFT 알고리즘 문제풀이 / 숫자찾기 & 문자열 정렬하기
오늘 풀어본 첫번째 문제는 숫자 찾기이다.
알고리즘 문제를 풀때는 항상 어떻게 코드로 그려낼지를 고민해야한다는 것에 중점을 두고,
num 안에서 k 의 값을 찾아내어 그 k의 값이 몇번째자리에 있는숫자인지를 계산하는 식을 생각해냈다.
그리고 몇번째 자리에있는 숫자인지를 표현할때는
보통 array값이 0부터 시작하니 +1을 해서 return 값을 추출해내는걸로
나름의 치밀함을 갖추고 코드를 짰는데 , 역시나 문법이 부족한탓에 계속 문법적인곳에서 실수를 하는것같다.
func solution(_ num:Int, _ k:Int) -> Int {
// num이 인트값이라 배열이아님
for (index , value) in num.enumerated(){
// index 0 1 2 3 4
// value 2 9 1 8 3
// k 0123456789 ( random )
if k == value {
return index += 1
break
} else if k > value , k < value {
return index = -1
}
}
}
enumerated라는 함수를 배워서 한번 써먹어보자하고 야심차게 써보았고
만약 k의 값이 value( ex 2 9 1 8 3 ) 의 값과 같아질때
index( 몇번째 자릿수 인지 ) 를 찾아서 +1값을 return해라
그게 아니면 k>value , k<value처럼 아예 k가 아닐때에는 , -1을 return 해라.
라는 의도를 가지고 코드를 짰다.
얼핏보면 잘 짜진 코드같아서 나름대로 나 성장했다 ( 흐뭇 ) 하며 코드실행을했었는데
역시나 오류가 한가득 떴다 ㅜㅜ
일단 마지막에
else if 로 시작하는 코드에서 k > value ... 를 쓰는게아니고 ,
그냥 위에서 k == value 라고 지정을해놓았으니
else 문만 쓰고 중괄호 시전하면 k == value 이외의 값들을 모두 포함한다는 사실을 까먹고있었다.
고로 그 코드를 수정해주고,
아예 답안으로 쓸 answer 객체를 하나 만들어서 0으로 지정해주었다.
그리고 늘 도움을 많이주시는 같은팀원이셨던 성표님의 도움을 많이받아서 여러가지 디테일요소를 수정하였고,
그중에서 가장 컸던 부분은 Int(String(value)) 라고 쓰여진 부분이다.
array 안에서 값 한개만 딱 추출할때는 그 값이 charater형으로 추출이 되는데 ,
현재 이 문제는 그 값을 int로 변환해주어야 하는 상황이고,
int 로 변환하려면 먼저 string값이 되어야하기때문에 저런식으로 써야 한다고 설명해주셨다. ( 🥹 )
고로 최종적으로 나온 코드는 아래와같다.
import Foundation
func solution(_ num:Int, _ k:Int) -> Int {
var num1:String = String(num)
var answer:Int = 0
// num이 인트값이라 배열이아님
for (index , value) in num1.enumerated(){
// index 0 1 2 3 4
// value 2 9 1 8 3
// k 0123456789 ( random )
if k == Int(String(value)) {
answer = index + 1
return answer
} else{
continue
}
}
answer = -1
return answer
}
물론 온전히 내가 혼자 풀었다곤 할 수 없겠지만 , 이 알고리즘 자체가 생각하는 과정을 중요시하는 거라고 생각을하고 ,
푸는 방식에 대한 고민의 방향이 일치했다는점에서 높은 성과를 얻었다고 믿기로했다!
그리고 풀어본 다음 문제는 문자열 정렬하기 이다.
my_string 안에 있는 값이 단순히 숫자뿐만이 아니고 문자도 같이있는 상태며
그 섞인 문자열에서 숫자만 끄집어내와서 숫자들을 오름차순으로 정렬하라는 문제이다.
보자마자 어 ? 저번에 써먹었던 enumerated로 index랑 value 추출해서 숫자인지 문자인지 찾은다음에
sorted로 오름차순 정렬하면 되겠네?! 라는 생각이 들었다.
내가 성장했다고 느낀게 전에는 이런 문제를 해독하는것 자체도 오래걸리고 머리가 지끈거렸는데
이젠 방향성이 보이는데 그리 오래걸리지않는다는점에서 도움주신분들에 한번 더 감사하게되었다.🥰
그래서 나온 코드는 다음과같다
import Foundation
func solution(_ my_string:String) -> [Int] {
var number = [1,2,3,4,5,6,7,8,9,0]
var dic:String = [""]
// var answer = 0
for (index,value) in my_string.enumerated(){
// index = 0 1 2 3 4 5 6
// value = h i 1 2 3 9 2
// sorted 로 오름차순 정렬 가능
if value == Int(String(number)){
dic.append(Int(value))
}
}
return dic.sorted
}
자 우선 number 객체부터 설명하자면
글자와 숫자가 섞여있는 상태에서 number에 속해있는 숫자랑 대조하여 숫자만 추출하게끔 만들어놓았다.
그러고 dic 이라는 객체는 빈 array값으로두고 , 숫자랑 대조했을때 숫자가 맞으면 append 해준다음 ,
마지막에 return하게되면 빈 array에다가 추출된 숫자만 넣게될테고 ,
sorted로인해 오름차순으로 정렬되겠지? 낄낄
하면서 만든 코드이다 !
물론 문법적으로 이상한부분이 굉장히많거나 쓸데없는 부분이 많을거란걸 알지만 어쩔 수 없다!
현재 나의 상태는 문법이 맞냐 안맞냐가 중요한게아니고 부딪혀야한다는걸 잘 알기때문에 ..
고로 이렇게코드를 짰지만 역시나 오류가 많았고 다시한번 고민을하게된다.
import Foundation
func solution(_ my_string:String) -> [Int] {
var arr = [""]
// var answer = 0
for i in my_string{
if Int(i) != nil{
arr.append(Int(i))
}
}
return arr.sorted(by: <)
}
그래서 나온 두번째 코드.
optional 개념을 이용한 코드인데 , 만약 i의값이 int 가 아니면 nil값을 추출해라 !
int값이 맞으면 arr 라는 객체에 i라는 int값을 추가해라 ! 라는 형태이다.
그리고 마지막에는 by: < 을 통해 확실한 오름차순으로 정렬 요구 까지 코드로 짜놓았다.
그런데 이 코드도 오류가 많이 떴다
내일은 이 알고리즘문제를 다시 고민해보고 무엇이 잘못됬는지를 더 고민해보아야겠다!