TASK를 그룹으로 짓고 그룹으로 묶인 작업이 끝나는 시점을 알고 싶다! 그룹1의 작업이 여러쓰레드에서 작업을 해도 묶여있고 마지막 task가 끝나는 시점을 알 수 있다. ex) 런치스크린 후 앱첫화면 나오는데 메인에서 이미지를 다 다운받지 못한다면? 에러처럼 보이게 된다. 그러면 마지막꺼까지 다 받고 앱을 그려주자! let group1 = DispatchGroup() DispatchQueue.global(qos:).async(group: group1){} group1.notify(queue.DispatchQueue.main){[weak self] in self.textLabel.text = "끝"} queue로 보낼때 어떤 그룹으로 보낼지 정해주면 된다. 모든작업이 끝날때까지 현재 대기열 블락하는 동기..
아이폰에는 여러개의 쓰레드가 있다. 쓰레드 = 일하는 노예들이라 생각하면댐. 왜 버벅이냐? 일하는 녀석이 여러개가 있어도 한놈한테 야 너 다해! 이러면 아 할게 너무많아....하면서 하고하고하고 하면서 버벅댐. => 다른 쓰레드로 작업을 분산하면 되겟다~ 매우 간단! 그러면 어떻게 분산할껀데 ? iOS에서는 Task를 대기행렬(큐)에만 보내면 된다. 그러면 알아서 OS가 한다. 와우 미쳣다~ 그러면 작업을 큐에만 보내면 되겟네? 내가 할 것은 오직 큐에만 보내자!!! 직접적으로 쓰레드 관리 X, 큐에 넣으면 알아서 작업을 분산처리. 쓰레드보다 더 높은 차원에서 일을 한다고 보면됨. 비동기적 대기행렬(큐)에는 두가지 있다. GCD, Operation Queue. DispatchQueue.global().a..
- What is Data Race?두 스레드가 동기화 없이 동일한 객체에 접근하려 할때 ⇒ Data race이벤트 순서가 프로그램의 정확성에 영향을 미칠때 ⇒ Race Conditionex) Thread별 연산의 실행 순서에 따라 값이 달라질 수 있다! 고로 Data Race≠Race conditionclass MyDataManager { static let instance = MyDataManager() private init() {} var data: [String] = [] func getRandomData() -> String? { self.data.append(UUID().uuidString) print(Thread.current) r..
Date race 상황을 만들지 않고 서로 다른 격리 도메인 간에 안전하게 공유 할 수 있는 타입. -> 복사를 통해 값을 동시성 도메인에 안전하게 전달할 수 있는 타입이다. swift compiler빌드세팅에서 strict Concurrency checking complete로 세팅을 해놓으면 Task에서 sendable하지 않기에 안전하지 않다라는 경고가 뜬다.왜? Task의 success result type이 sendable protocol을 준수하기 고럼 이게 뭔데? 주어진 타입의 값이 concurrent code에서 안전하게 사용될 수 있음을 나타낸다. ==> 동시에 사용하기에 안전한 타입, Actor간에 값을 공유 할 수 있는 타입. sendable 프로토콜을 conform 할수 있는 것들 ..
https://school.programmers.co.kr/learn/courses/30/lessons/92344 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr ?? 왤캐 쉬워? 하면서 풀었던 문제 1트 타입이1이라면 데미지니까 보드에서 디그리만큼 빼주고 아닐경우는 더해주고 보드를 전체적으로 돌아보면서 0보다 크다면 남아있는벽이므로 answer+=1해주었다. 그랫더니 결과는? 두구두구두구... def solution(board, skill): answer = 0 for type,r1,c1,r2,c2,degree in skill: if type == 1: ..
https://school.programmers.co.kr/learn/courses/30/lessons/92342 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. n의 제한이 10이기에 일단 나는 중복조합을 사용해도 된다고 생각을 하였다. 2. info를 보면 점수가 첫번째인덱스가 10이고 줄어드는 형식으로 되어있기에 temprion에도 만약 내가 맞춘 점수에 해당하는 인덱스에 1이 증가하도록 하였다. 그리고 나서 해당하는 temprion과 info를 비교하면서 만약 temprion이 크다면 라이언이 해당하는 점수를 얻고 아닌데 만약 Info[k]에만..
https://school.programmers.co.kr/learn/courses/30/lessons/92341 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제해석 fees에 순서대로기본시간, 기본요금, 추가시간당, 추가요금으로 나오고 records에는 몇시에 어떤차가 들어오거나 나갔는지의 기록이 있다. 먼저 레코드들의 정보를 쪼개서 cardict에 key값으로는 차번호가 value에는 시간과 in,out상태를 넣어주었다. 첫번째 for문을 다 돌게 되면 키값에 해당하는 모든 history가 value로 이차배열이 들어가게 된다. 그 후 문제에서 보..
https://school.programmers.co.kr/learn/courses/30/lessons/118669 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 다익스트라를 입맛대로 바꾼문제 그러므로 왕복을 구하는게 아닌 일단 목적지까지 제일 intensity가 낮은 값을 찾는 방법을 찾는다면 그방법고대로 다시 돌아오면 된다. 출발지를 어디서 시작하건 summit을 어디가던 그냥 제일 intensity가 짧은 상태를 유지하는 곳에서 시작하고 도착하면 된다는 문제해결방법이였다. 원래는 최단거리를 구하기 위해 가중치의 합을 비교하는게 다익스트라인데 여기서는..
https://school.programmers.co.kr/learn/courses/30/lessons/118667 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제해석 길이가 같은 큐를 두개 준다. 그리고 나서 FIFO 구조로 POP을 하면 맨앞에것이 빠지고 insert를 하면 맨 마지막 인덱스 뒤에 추가가 된다. 그렇게 반복하여 두 큐를 같게 해라!가 문제였다. 그냥 단순하게 생각을 해보았다. 두 큐가 주어지면 각 합을 구한다음에 더 큰 놈에서 앞에꺼를 POP해서 작은놈한테 insert를 해주면서 맞추어 나가는 단계를 진행하면 되지 않을까? 여기서 ..
https://school.programmers.co.kr/learn/courses/30/lessons/118666 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 이해 MBTI와 같이 각각의 항목들을 검사하면서 어디쪽에 더 가깝니? 하는 문제로서 이해에 어려움은 없었다. 예를들어 survey에 ["AN", "CF", "MJ", "RT", "NA"]이 들어오고 choices에 [5,3,2,7,5]가 들어온다면 순차적으로 5는 약한동의이므로 뒤에 있는것에 +1을 해주고 3은 약한비동의이므로 앞에거에 +1해주고 2는 비동의라 앞에꺼에 +2해주고 T는 매우..