전체 글 24

swift leetcode Two Sum 풀기

문제 Int형 배열이 주어졌을때 두개의 원소를 더해서 target을 만들수 있는 Index를 반환하는 문제입니다. 예를들어 nums = [2,7,11,15], target = 9일때 결과 값은 [0, 1]인 것입니다. 결과값은 오직 하나라고 하고, 같은 위치에 있는 원소를 두번 더하는 것은 안된다고 합니다. 조건은 nums의 길이는 2 부터 10000까지 입니다 O(N^2)로 풀었을때 1억의 연산량이라고 생각하면 되니 얼추 N^2까지 가능 해보입니다. 풀이 먼저 제일 쉽게 떠오르는 방법은 완전 탐색 입니다. [1,2,3,4,5] 가 있다고 한다면 1부터 시작해서 (1,2) (1,3) (1,4) (1,5) ... (4,5)까지 하나씩 비교 하는 방법 입니다. 0부터 n까지 그리고 i+1 부터 n까지 이중 ..

PS 2021.07.20

swift Optional을 처리하는 방법들

if let if let으로 사용하는 방식입니다. var optionalNumber: Int? = 5 if let number = optionalNumber { print("value is",number) } else { print("value is nil") } guard let return으로 빠져나갈 수도 있고 for문 안에서는 continue나 break로 빠져나갈 수 있습니다. func test(optionalNumber: Int?) { guard let number = optionalNumber else { print("value is nil") return } print("value is",number) } map, flatmap 이런식으로 map 안에서 그 값을 받아 올 수 있습니다. le..

Swift 2021.07.18

[오늘의일기] 애플 개발자 계정 구입

오늘은 애플 개발자 계정을 드디어 구입했다. 돈이아까워서 앱이 다 완성이 되면 사야지 했지만 이러한 생각은 내가 개발을 하는데 더 시간만 늦추는 것이라 생각되어 조금 손해를 보더라도 내가 공부하자라는 의미로 바로 구매했다 13만원이라는 가격이 작진 않지만 내가 더 많은 것들을 해주는데 아쉬움은 없었다. 혼자 개발을 하다보니 아무래도 일정이 늘어지고 피쳐들도 내 마음대로 마음 내키는대로 작업하기 일수다. 이러한 점을 개선하는 방법이 필요하다고 생각된다. 큰 프로젝트 기간과 세부기간 그 세부기간들에 특징들을 잘 정리하고 그 계획대로 프로젝트를 진행하는게 필요하다고 느꼈다. 프로젝트 계획을 어떻게 진행할지 많은 툴들을 검색해봤는데 일단 깃헙에 있는 Project를 Kanban을 이용해보려 한다.

오늘의일기 2021.07.17

운영체제란?

운영체제(OS)란 무엇인가요 OS란 컴퓨터의 하드웨어를 효율적으로 관리하여 사용자가 컴퓨터를 편리하게 사용할 수 있게 해주는 프로그램입니다. 운영체제가 하는 일을 설명해주세요 운영체제가 하는 일은 컴퓨터를 사용할 수 있게 사용자에게 Interface를 제공하고 컴퓨터의 자원을 효율적으로 사용하도록 자원을 관리합니다. 대표적으로는 CPU와 Memory가 있습니다. CPU관리는 어떻게 하나요? 먼저 CPU를 관리한다는 것은 프로세스를 관리한다는 의미 입니다. 프로세스란 실행중인 프로그램으로써 컴퓨터에는 동시에 수많은 프로세스가 실행이 되고 있는데요. 이것을 유저가 사용할 수 있게 정확하고 빠르게 처리해야합니다. 따라서 어떤 프로세스를 처리할 것인지 결정하는 프로세스를 스케쥴링 해야합니다. 프로세스 스케쥴링은..

cs 2021.07.15

객체지향 프로그래밍이란?

객체지향 프로그래밍에 대해 설명해주세요. 객체지향 프로그래밍은 상태와 행위를 가진 객체들간에 상호작용을 통해 프로그래밍 하는 프로그래밍 패러다임 중 하나 입니다. 객체에 대해서 좀 더 자세히 말씀해주세요 객체는 클래스에서 정의된 것을 토대로 메모리에 할당 된 것으로 프로그램에서 사용하는 변수와 메소드들을 가지고 있는 구별된 메모리 공간입니다. 이 공간은 변수에 할당된 주소를 통해 접근 할 수 있습니다 즉 변수에 객체를 할당 할 수 있고 그 변수를 통해 객체가 가지고 있는 상태와 메소드를 접근 할 수 있습니다. 클래스를 언급하셨는데 클래스는 무엇인가요? 클래스는 상태와 메소드들의 이름과 타입을 결정해논 객체를 만들기 위한 설계도 입니다. 이 클래스를 만드는 것이 객체지향에서 추상화하는것이라 할 수 있습니다..

cs 2021.07.14

swift permutation 구현

PS를 하는데 있어서 permutation을 사용할 일이 있어서 한번 짚고 넘어가려 한다. 내가 필요하다고 생각했던 문제는 2020 카카오 인턴 코딩테스트 문제에서 수식최대화 문제였다. 이 문제에서는 + - * 세가지의 연산자가 있을때 이 연산자들의 우선순위를 정해주어야 하는데 완전 탐색으로 모든 경우에 대해서 확인을 해봐야 했기 때문이다 즉 + - * 일 수도 있고 - + * 일수도 있다 즉 3! 6가지의 경우를 다 검사를 해봐야 했기 때문의 순열로 가능한 경우의 수를 다 구해야 했었기 때문에 순열을 사용하려고 생각 했다. 내가 참조 한 글은 하단의 글이다. 여기서 작성 해준 코드를 약간 변형해서 사용 했다. https://github.com/raywenderlich/swift-algorithm-clu..

PS 2021.07.12

[오늘의 일기] 재대로 살아가기

나는 성격이 참 대충대충 살아가는 성격 같다. 꼼꼼히 따지지 않고 또 내가 무엇을 할때도 어느정도 하다보면 슬슬 한다고 느꼈다 오늘도 느낀것이 청소기를 돌리는데 날이 더워서 그런지 움직이는것만 으로도 땀이 났고 바닥에는 물이 뭍어 있어서 그런지 청소기가 잘 밀리지도 않았다. 결국 나는 좋은 의지로 청소를 시작했지만 중간에 대충 슥슥 하고 마는걸 깨닫고 정신차려서 다시 꼼꼼히 청소를 한 기억이 있다. 또 한번은 엄마가 상추를 씻으라고 시켜서 하나씩 하나씩 씻었는데 마지막에 여러개를 한번에 씻었다. 마지막에 대충 대충 하는 나의 습관이 나온 것이다. 결국 엄마가 상추에서 작은 벌레를 발견해서 나한테 뭐라고 하셨는데 이렇듯 나의 대충대충 하는 습관 어느순간 나타나게 된다. 그냥 하면 됐지. 대충 되면 됐지 라..

오늘의일기 2021.07.11

[오늘의 일기] 네이버 웹툰 과제 챌린지

오늘 과제 챌린지를 봤다. 자세한 문제 내용을 적을 순 없지만 아무래도 Image 쪽으로 문제가 나왔다. 어느정도 예상은 했었지만 그래도 과제는 항상 볼때마다 떨리는 것 같다. 이게 대량의 Image를 Collectionview 로 표현하는 경우가 많다. feed라고도 하는거 같은데. 프레임드랍을 막기 위해 필요할때마다 이미지를 호출해서 불러와야하고, 또 캐시도 적당히 이루어져야 된다고 알고있다, 이를 라이브러리를 이용해서 하는 경우가 많다 근데 이번에 어느정도 직접 구현을 해야했었는데 이를 잘 해결하지 못한거 같아 아쉬운 마음이 든다. 사실 아쉽다기보단 아에 할줄 몰라서 포기하고 구조에 좀 더 신경써서 구현하긴 했다. 아마 collectionview prepare라던지 image Cache등을 요구했던..

오늘의일기 2021.07.10

오늘의 일기 clean swift로구현하기

본격적으로 clean swift로 앱을 구현하기 시작했다. Interactor Presentor Router Worker 등으로 나누어서 각자의 역할을 맡아서 신을 관리하는데 유저의 입력을 받는곳은 ViewController와 View에서 먼저 입력을 받는다. 이렇게 입력을 받으면 Interator에게 Business Logic을 맡긴다. 간단한 일은 직접 처리하지만 Worker를 사용해서 무거운 로직을 사용하기도 한다. 이렇게 Business Logic을 처리하면 이를 Presenter에게 연산한 값을 넘겨주는데 Presenter는 이를 View에 표시하기 위한 데이터 형식으로 변환시키는 역할을 한다. 이렇게 Cycle을 이루며 뷰에서 입력을 받으면 출력까지 이어진다. 이는 Clean Swift에서 t..

오늘의일기 2021.07.09

오늘의일기 Snapkit 사용해보기

오늘은 SnapKit을 사용해보았다 어제 Texture를 한번 살펴보고 레이아웃을 도와주는 여러 라이브러를 검색해보다가 SnapKit을 사용해보았다. Texture같은 경우엔 Node라는 View를 Wrapping하고 있는 새로운 클래스를 만들어서 새로운 LifeCycle을 가지고 뷰를 관리 해주고 여러 무거운 작업들을 백그라운드에서 실행 시킴으로서 프레임드랍이 없게 도와주는 조금은 크고 무거운 라이브러리 였다면 SnapKit은 Auto layout을 더 간편하게 사용할 수 있게 도와주는 라이브러리 였다. NSLayoutConstraint.activate([ collectionView.leadingAnchor.constraint(equalTo: view.leadingAnchor), collectionVi..

오늘의일기 2021.07.08