2023. 8. 11. 00:21ㆍIOS [ Swift ]
sort 라는 함수는 배열안의 문자나 숫자를 차례대로 오름&내림차순 정렬해주는 함수이다.
이 함수를 자체제작해서 만들어보려고 제작해보았다.
func sort(number:[Int]) -> [Int]{
// 입력자가 입력하는값이 배열 [] < 안에 들어감.
// ex ) 입력값 1532 > [1,5,3,2]
var answer:[Int] = []
for i in 0...(number.count-1){
// var numminus = (number.count-1)
var iplus = i + 1
if i > iplus{
answer += [i]
iplus + 1
}else {
iplus + 1
}
}
return answer
}
여러가지로 머리를 굴려봤는데 , 이게 맞는지는 테스트 해보지못하였지만
우선 코드설명을 해보자면 ,
sort라는 객체명을 지정해주고
number < 즉 사용자가 입력하는 값은 [Int] 배열의 형태로 입력받게 되며 , 출력시에도 같은 형태로 출력하게 한다.
그리고 우리는 오름 내림차순으로 숫자를 재 정렬 해야 하기때문에
그 새로 정렬할 숫자를 다시 담아줄 그릇을
var answer 로 만들어주었다. ( 빈 괄호로 빈그릇 생성 )
자 그럼 이제 for문을 돌려서 , i 값을 0... number.count-1
즉 number 배열안에 있는 숫자의 최대치까지 돌려준다.
( index값은 0부터 시작이기때문에 배열안에 숫자가 4개가있다면 count는 4를 뱉지만
index자체는 0 1 2 3 이라 3이 최대기떄문에 -1 해주는것 )
그다음 ipuls 라는 객체를 생성해서 i+1로 지정해준다.
이유는 i의 값이 i+1 즉 다음배열값 보다 크면 answer의 빈배열에 그 i값을 추가해주어야 하기때문.
( 여기서 의문이 예를들어 배열이 [ 1 , 5 , 3 , 2 ] 라고치면
i의 값이 1일때 i+1이 2가되는것인지 , 아니면 5가되는것인지가 의문이지만, 나의 의도로는 후자이다. )
자 그다음 그 i 값과 iplus(다음배열값) 을 비교해서 i의 값이 더 크면
answer의 빈배열에 i값을 추가함과 동시에 iplus(i+1)의 값에 +1을 더해주어서 ,
i+2를 만들어준다 ( 의도 = 다음배열도 찾아봐~ )
그러나 혹은 i 가 iplus 보다 작을 수 있기때문에 , 그런경우에도 else를 써줘서 계속 찾아보라고 iplus + 1을 해준다.
그러면 answer에 가장 큰 숫자 순서대로 쌓이게 되..는지는 모르겠지만 일단 여기까지 생각해보았다.
고작 몇줄안되는 코드지만 진짜 썼다지웠다 엄청많이 고민하고 생각했다.
다음은 filter 함수를 제작해보았다.
func filter(number:[String]) -> [Int]{
var answer = Array<Int>()
for i in number{
var num = Int(i)
if num != nil{
answer.append(num!)
}
}
return answer
}
이건 비교적 이해가 쉬운코드였는데 ,
우선 filter의 기능이 예를들어 배열안에 숫자와 문자가 섞여있는데 난 숫자만 꺼내고싶어 !
한다면 숫자만 필터링해줄 수 있는 코드이다.
그래서 만들어보자면
우선 number라는 사용자의 입력값 배열 안에는 뭐든 들어가있는상태라고 쳐보자.
ex ) [ "1", "5", "2" , "안녕", "hey", "9" ]
그리고 우린 현재 숫자만 꺼내고 싶은상태.
그럼 1,5,2,9 만 꺼내야하는데 그러기위해서는
number안의 string 값을 다 int로 출력해버린다.
( 여기까지가 (number:[String]) -> [Int])
그렇게되면 현재 Int 값으로 출력이 불가능한
안녕 , hey 문자열들은 nil값으로 추출되는데 ( optional )
우린 어차피 이 문자값을 추출해줄필요가없으니까 그걸 역이용해서
nil값으로 추출된 값들을 다 없애버리면 ! 숫자만남는것.
고로 for문으로 number 안을 돌면서 , i의 값을
answer에다가 num을 언래핑한 값으로 추가해버려라.
왜냐면 언래핑했을때 Int 값이 아니라면 어차피 추가가 안될것이기때문
( 이론 틀렸을 수 있음 . Optional 에 대한 개념 아직 완벽하지가않음 )
고로 저런 코드가 만들어진것이다.
( reduce 함수도 만들어보려고 했으나 머리안굴러감, 방식이 생각 잘 안남 )
다음은 오늘 못 푼 알고리즘 문제 영어가 싫어요이다.
결론부터 말하면 풀지못하였고,
코드를 설명하자면 ,
일단 zero one two three 등등의 문자를 0 1 2 3 과 같이 숫자로 바꾸는것이다보니까 ,
index가 0부터 시작하는것을 빗대어 어떻게 구현하면 되지않을까? 라는 생각에서 시작된 코드.
enumerated 를 사용하면 index값과 value값 모두 활용할 수 있으리라고 장담하고 짜기시작했는데
아이디어가 잘 떠오르지않아서 정체되어있다. 다음에 더 고민해보는걸로..
( 쌓인알고리즘문제 너무많아서 주말에 추가공부를 해야될것같다..)
'IOS [ Swift ]' 카테고리의 다른 글
23.08.14 팀 프로젝트 시작 / 인스타그램 앱 제작 ( 대략적인 구성 및 제작기 ) (1) (1) | 2023.08.15 |
---|---|
23.08.11 swift ui로 실로폰 제작 (0) | 2023.08.15 |
23.08.09 optional 개념정돈 / clouser 살짝이해해보기 / 알고리즘 n의 배수 고르기 / navigationView (0) | 2023.08.10 |
23.08.08 알고리즘 로그인성공? / table view 개념정돈 (0) | 2023.08.09 |
23.08.07 배운 문법들 개념 정리본 / 알고리즘 (직사각형 넓이 구하기) (0) | 2023.08.08 |