TIL

37일차 TIL

h_luz 2024. 4. 18. 23:12
Swift 알고리즘 및 언어공부

헉 이번엔 진짜 길어서 두 장에 담았다.... ㅋㅋㅋㅋㅋ,,

전에 같은 팀원님 블로그에서 이 문제 봤던 것 같은데ㅜㅜ 나도 도전 !

 

contains 함수와 Dictionary를 써봤다 !

Dictionary 이론? 상으로는 알고 있었지만 써보기가 쉽지 않았는데, 이렇게 써보니까 확실히 공부가 되는 것 같음

그런 의미에서 한 번 더 정리..

 

contains(_:)

: 시퀀스에 지정된 요소가 포함되어 있는지 여부를 나타내는 부울 값을 반환

let cast = ["Vivien", "Marlon", "Kim", "Karl"]
print(cast.contains("Marlon")) // Prints "true"
print(cast.contains("James")) // Prints "false"

사실 contains 함수는 전에도 사용한 적이 있는데, 함수들이 너무 많아서 자주 사용해주지 않으면 금방 잊어버리는 것 같기도...

여튼 이번에 다시 제대로 알게 된 사실은 부울 값을 반환한다는 점 ! (참고자료:공식문서)

 

Dictionary

: 요소가 키-값(key-value)쌍인 컬렉션

var responseMessages = [200: "OK",
                        403: "Access forbidden",
                        404: "File not found",
                        500: "Internal server error"]

우선 Dictionary는 이런 식으로 선언할 수 있다. [ key1:value1, key2:value2, key3:value3 ]

사용하는 예시를 보자면

print(responseMessages[200]) // Optional("OK")

이렇게 key로 Optional(value)값을 출력할 수 있다.

그 외에도 다양한 방식으로 Dictionary를 사용할 수 있는데, 자세한 내용은 공식문서 참고 !

https://developer.apple.com/documentation/swift/dictionary

 

Dictionary | Apple Developer Documentation

A collection whose elements are key-value pairs.

developer.apple.com

 

import Foundation

func solution(_ lottos:[Int], _ win_nums:[Int]) -> [Int] {
    var rank = [ 6:1, 5:2, 4:3, 3:4, 2:5, 1:6, 0:6 ]
    var maxCorrect = 0
    var minCorrect = 0

    var result:[Int] = []

    for i in 0..<lottos.count {
        if win_nums.contains(lottos[i]) {
            maxCorrect += 1
            minCorrect += 1
        }
        if lottos[i] == 0 {
            maxCorrect += 1
        }
    }
    result.append(rank[maxCorrect]!)
    result.append(rank[minCorrect]!)
    return result
}

결론 코드는 이렇다 !

1 lottos랑 win_nums 비교해서 동일한 만큼 maxCorrect와 minCorrect에 1 더해주기

2 if문 사용해서 lottos에 0이 있으면 0의 개수만큼 maxCorrect엔 1을 더하고, minCorrect는 더해주지 않음

   ( 최고등수가 나오려면 0 (가려진 부분)이 다 맞아야 하고, 최저등수가 나오려면 0 부분이 다 틀려야 하기 때문 )

3 result 배열에 최고등수와 최저등수를 append 해주는 데,

   지금까지 구한 값은 맞은 개수이기 때문에 Dictionary를 사용해서 6개 맞으면 1등 출력, 5개 맞으면 2등 출력하는 방식 코드 구현         

   (Dictionary는 Optional타입으로 추출되기 때문에 강제 옵셔널 해제 필요)

 

이제 다른 사람의 풀이를 보자,, ㅠㅠ 자괴감 타임..

import Foundation

func solution(_ lottos:[Int], _ win_nums:[Int]) -> [Int] {

    let zeroCount = lottos.filter { $0 == 0}.count
    let winCount: Int = win_nums.filter { lottos.contains($0) }.count


    return [min(7-winCount-zeroCount,6), min(7-winCount,6)]
}

내 코드 눈 감어... ㅋㅋ...

클로저를 이렇게 자유롭게 사용하다니 대단하다.. 나도 클로저에 좀 익숙해지면 좋겠는데,,, ㅠ

filter로 lottos와 win_nums가 동일한 것만 골라내서 .count로 개수 세어주기

0인 개수도 filter로 골라서 갯수 세어주고 마지막에 그냥 냅다 빼주기...

진짜 코드가 간결하고, 고차함수를 적절하게 사용하신 듯,, 그리고 이렇게 간단하게 만들 생각을 한 것이 정말 대단.. 하다..! 천재인가..

다 아는 함수인데, 어떻게  응용응용하는지가 중요한 것 같다.. ㅜ

 

휴 겨우 알고리즘 끝났네,,, ㅠㅠ


iOS 숙련 개인 과제 : 위시리스트 앱 만들기
[스파르타 코딩클럽]

 

아놔,, 추가기능구현하기 전에 미리 깃에 업로드해놓으려고 했는데 add 잘못해 줘서!!!!ㅠㅠ 시간 왕창 썼다......... 

흑흑,,, 제발 git 올리기 전에 한 번 더 생각하는 내가 되길....

 

잘못 add 한 문제는 어떻게든 해결했는데, 또 문제가 뭐냐면.. main 스토리보드가 코드로 바뀌어버림.. 와이..?

모르겠어서 chatGPT 형님께 여쭤봤습니다... ㅜ

아무래도 4번 문제였던 것 같음.. ㅠㅠㅜ 어떤 파일을 git rm으로 삭제했던 것 같은데,, ㅠ

넵 죄송합니다ㅠㅠㅠ

여튼 추가 기능 구현하는데 스토리보드는 딱히 필요 없을 것 같고,, 실행은 잘 돼서,, 그냥 추가 기능 구현을 해보려고 한다..

 

추가 기능 구현

- 당겨서 새로고침하기 

 

UIRefreshControl

: 스크롤 뷰 내용의 새로 고침을 시작할 수 있는 표준 컨트롤

https://developer.apple.com/documentation/uikit/uirefreshcontrol

 

UIRefreshControl | Apple Developer Documentation

A standard control that can initiate the refreshing of a scroll view’s contents.

developer.apple.com

 

func configureRefreshControl () {
   // Add the refresh control to your UIScrollView object.
   myScrollingView.refreshControl = UIRefreshControl()
   myScrollingView.refreshControl?.addTarget(self, action:
                                      #selector(handleRefreshControl),
                                      for: .valueChanged)
}
    
@objc func handleRefreshControl() {
   // Update your content…


   // Dismiss the refresh control.
   DispatchQueue.main.async {
      self.myScrollingView.refreshControl?.endRefreshing()
   }
}

 

공식문서 예시인데, 아마 공식문서에는 UIScrollView가 있는 화면에 당겨서 새로고침을 하는? 내용인 것 같다

DispatchQueue로 비동기 작업 실행까지

 

-

실패했다. 내일까지 해보는 걸로..

 

 

 

'TIL' 카테고리의 다른 글

40일차 TIL  (0) 2024.04.23
38일차 TIL  (1) 2024.04.19
36일차 TIL  (6) 2024.04.17
35일차 TIL  (8) 2024.04.16
34일차 TIL  (4) 2024.04.15