전체 카테고리 197

[Swift Algorithm] 64064 불량 사용자 (2019 카카오 인턴십)

programmers.co.kr/learn/courses/30/lessons/64064코딩테스트 연습 - 불량 사용자개발팀 내에서 이벤트 개발을 담당하고 있는 "무지"는 최근 진행된 카카오이모티콘 이벤트에 비정상적인 방법으로 당첨을 시도한 응모자들을 발견하였습니다. 이런 응모자들을 따로 모아 불량 programmers.co.kr 풀이방법먼저 불량사용자에 해당하는 유저아이디를 이차원배열의 형태로 모두 저장했어요["frodo", "fradi", "crodo", "abc123", "frodoc"], ["fr*d*", "abc1**"]주어진 예시가 위의 형태라면[[frodo, fradi], [abc123]]이렇게 저장되어있겟죠여기서 저는 문자열로 저장하지않고 간단하게 비교하기위해 인덱스를 사용했어요result ..

[Swift Algorithm] 67258 보석쇼핑 (2020 카카오 인턴십)

programmers.co.kr/learn/courses/30/lessons/67258 코딩테스트 연습 - 보석 쇼핑 ["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"] [3, 7] programmers.co.kr 풀이방법 처음에는 단순무식하게 Set을 이용해서 마지막index를 찾고 마지막index부터 처음으로 돌아오면서 모든 보석을 포함하는 구간을 찾는 방법을 사용했지만 [1, 2, 2, 3, 1] 이런경우 (시작 위치 1이라고 가정) [1, 4]가아니라 [3, 5] 가 나와야 정답인 케이스가 있더라구요 처음에 사용한 방법을 이용하면 이런경우를 골라낼수 없기때문에 다른 방법을 생각해야했어요 크기제한이 100,000이므로 n^2을 하..

카테고리 없음 2021.04.22

[Swift Algorithm] 투 포인터 알고리즘

투 포인트 알고리즘은 구간의 합같이 구간을 비교할 때 효율적으로 사용할 수 있는 알고리즘이에요 보통 for문 중첩을 통해서 O(N^2)시간초과로 인해서 사용하구요 이 알고리즘의 시간복잡도는 O(N)으로 한번의 순회에 조건을 찾을 수 있어요 구간을 비교하면서 원하는 조건에 달성할때까지 먼저 end를 움직인 다음 start를 하나씩 이동하면서 구간을 좁혀가며 조건을 확인해요 조건에 해당하지않게되면 end가 배열의 끝까지 이동했는지 확인하고 끝까지 가지않았다면 end를 하나씩 이동하며 다시 start와 비교하는 과정을 거쳐요 . . . . 예를 들어서 sum이 10이상인 구간을 찾는데 그 중에서 제일 빠른 구간을 찾는다고 할게요 초기상태의 배열은 처음과끝이 같고 현재합은 1이죠 다음으로는 end를 이동시키면서..

[Swift Algorithm] 64062 징검다리 (2019카카오 겨울인턴십)

programmers.co.kr/learn/courses/30/lessons/64062 코딩테스트 연습 - 징검다리 건너기 [2, 4, 5, 3, 2, 1, 4, 2, 5, 1] 3 3 programmers.co.kr 풀이방법 범위가 2억이기때문에... 그냥풀면 분명이 시간초과가 걸릴거라고 생각...햇고.. 1명씩 건너도록 단순하게 푼경우.. 역시나 시간초과에 걸린... private func solutionP64062(_ stones:[Int], _ k:Int) -> Int { var stones = stones var isJump = true var result = 0 while true { var zeroCount = 0 for stone in stones { if stone = k { isJump..

[SwiftUI] 뷰 상태변경 @State @Binding @ObservedObject @StateObject

SwiftUI를 사용한다면 꼭 알아야할 Property Wrapper중 상태변화에 대한것을 알아보려고해요 @State UIKit에선 Property Observer를 통해서 변화가 일어나면 뷰를 업데이트시키는 방식을 사용했지만 SwiftUI에선 @State라는 프로퍼티 래퍼를 통해서 같은 일을 할 수 있어요 @State로 선언된 변수의 값이 변할 때 View를 다시 계산해서 그려줘요 주의사항으로는 View의 body에서만 @State변수에 접근해야해요 즉, private 선언이 따라오는것을 권장하고 외부에서 이 변수에 접근하면 안돼요 경고문, 텍스트필드, 편집모드같이 현재화면의상태를 잠깐 나타내거나 간단한 View의 상태를 나타낼 변수를 선언하는데 적합하죠 SwiftUI에서 View는 struct형태로 ..

[Data Structure] Priority Queue 우선순위 큐

우선순위 큐는 힙구조로 이뤄져있죠 힙구조란 완전이진트리이고 정렬기준에맞춰서 최댓값이나 최솟값을 빠르게 찾아낼 수 있어요 새로운 노드를 넣을땐 제일 끝에서 추가해서 자신의 부모의 인덱스인 (index-1)/2와 비교해서 거꾸로 올라오면서 조건에 맞는지 비교하며 교체가 일어나구요 (logn) 삭제할 때는 제일 위부터 아래로 가면서 다시 정렬하면서 교체하는 과정이 일어나요 (logn) struct PriorityQueue { var heap: [T] = [] let ordered: (T, T) -> Bool init(ordered: @escaping (T, T) -> Bool) { self.ordered = ordered } /// 큐 뒤에 요소 추가 mutating func enQueue(_ element:..

[Swift Algorithm] 42627 디스크 컨트롤러 (프로그래머스)

programmers.co.kr/learn/courses/30/lessons/42627 코딩테스트 연습 - 디스크 컨트롤러 하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를 programmers.co.kr 주어진 요청에따라 응답하는데 걸리는 최소평균시간을 구하는 문제에요 문제를 보면 아래처럼 요청이 들어와요 이러한 요청을 처리하는 다양한 방법이있죠 왼쪽처럼 처리하면 3 + 7 + 17 = 27ms 오른쪽처럼 처리하면 3 + 11 + 16 = 30ms 왼쪽처럼 하는 방법이 최선의 선택이겟네요! 풀이방법 우선순위 큐를 사용해서 해결 할 수 있는 문제에요 우선순위 큐는 힙자료구..

[RxSwift] ReactorKit 체험 (Hello ReactorKit)

Rx를 사용하면서 MVVM을 쓰게되는데 Observable변수가 많아지게되면 상태를 나타내는 변수와 행동을 나타내는 변수의 구분이 잘 안가서 헷갈리고 의도를 파악하기 어려워서 쓰이는곳을 타고타고 찾아가서 직접 확인해야하는 경우가 생기죠 관리가 쉽지않다는것을 느꼈어요 이 문제점을 ReactorKit이 잡아주고 깔끔해진다고 해서 한번 써보려고 합니다! 간단하게 개념부터 읽고 가려해요 아키텍쳐의 모습이에요 View 뷰컨트롤러 셀도 View에 포함 View레이어에는 비지니스 로직이없고 입력을 action스트림에 바인딩하고 뷰의 state를 각 UI컴포넌트에 바인딩하는 역할 Reactor(ViewModel) 뷰의 상태를 관리하고 UI와는 독립된 계층 모든 뷰는 각각 1:1대응되는 reactor를 가지고 있음 뷰에..

[Swift Algorithm] 72413 합승 택시 요금 (2021 카카오 블라인드)

programmers.co.kr/learn/courses/30/lessons/72413 코딩테스트 연습 - 합승 택시 요금 6 4 6 2 [[4, 1, 10], [3, 5, 24], [5, 6, 2], [3, 1, 41], [5, 1, 24], [4, 6, 50], [2, 4, 66], [2, 3, 22], [1, 6, 25]] 82 7 3 4 1 [[5, 7, 9], [4, 6, 4], [3, 6, 1], [3, 2, 3], [2, 1, 6]] 14 6 4 5 6 [[2,6,6], [6,3,7], [4,6,7], [6,5,11], [2,5,12], [5,3,20], [2,4 programmers.co.kr 시작지점으로부터 A, B까지 가는 택시요금의 최소합을 구하는 문제구요 A,B가 합승해서간다면 요금..

[Swift] 정규식으로 유효성 확인하기

정규식을 검색해보면 크게 NSRegularExpression타입과 NSPredicate타입이 있어요 둘의 차이는 NSPredicate - 메모리 내 필터링 이나 검색을 통한 패치 -> Collection안의 내용을 검색 혹은 필터하는 용도 NSRegularExpression - 유니코드 문자열에 적용되는 정규식의 표현 -> 정규식! 흔히말하는 정규표현식은 NSRegularExpression을 사용하구요! 타입이름도 좀더 정규표현식같죠? (같은 패턴으로 NSPredicate를 사용하면 맞는데 틀리다고 나오는경우가 있어요) 문법부터 보면 더 헷갈리기때문에 예제와함께 이해해볼게요 바로바로 확인할 수 있는 실습사이트는 www.regexpal.com Regex Tester - Javascript, PCRE, PH..

iyOmSd/Title: Swift 2021.03.20