본문 바로가기

전체 글

(128)
[C++/LeetCode] Kth Largest Element in a Stream Daily LeetCoding Challenge for April, Day 8. 문제 배열에서 k번째로 큰 수를 찾음. 이때 add() 함수를 구현하여, 이 함수의 인자로 int 값을 주었을 때 배열에 추가하고 추가한 배열에서 k번째로 큰 수를 반환하도록 구현 아이디어: Heap(priority queue) k번째로 큰 수를 찾는 것이므로, k+1번부터 큰 수는 필요하지 않다. 즉 배열에서 없어도 된다.또한 k번째로 큰 수를 찾는 것이므로 오름차순으로 정렬한 배열이 필요하다.이 조건을 쉽게 만족하는 자료구조는 바로 Heap이다. Heap 1. complete binary tree2. 모든 노드의 값은 자식보다 크거나 같다. (max heap), 작거나 같다.(min heap) Heap은 위의 특성을 만족..
[iOS] UNUserNotificationCenterDelegate 로 보낸 로컬 알람 처리하기 지난 포스팅에서는 UNUserNotification 객체를 사용하여 로컬 알람을 보내는 방법을 알아보았다. [iOS] UserNotification으로 로컬 알림 사용하기 로컬 알림은 앱 내부의 메세지를 사용자에게 전달할 때 ios의 알림 센터를 거치도록 하여 전달하는 방식으로 이루어진다. 즉 앱이 종료되어 있거나 백그라운드 상태에서도 사용자 알림을 보낼 josushell.tistory.com 로컬 알림은 잘 활용하면 사용자에게 아주 좋은 효과를 줄 수 있다는 점에서 유용하다. 하지만 로컬 알림이 알림에서 그치지 않고 사용자 액션으로 이어질 수 있도록 하기 위해서는 어떻게 해야할까? 예를 들면, 카카오톡은 상단바 알림에서도 메세지를 보낼 수 있다. 또는 알림을 터치하면 그 카카오톡방으로 들어가게 된다. ..
[iOS] UserNotification으로 로컬 알림 사용하기 로컬 알림은 앱 내부의 메세지를 사용자에게 전달할 때 ios의 알림 센터를 거치도록 하여 전달하는 방식으로 이루어진다. 즉 앱이 종료되어 있거나 백그라운드 상태에서도 사용자 알림을 보낼 수 있다는 장점이 있다. 로컬 알림은 ios scheduler에 의해 발송된다. 앱 내부에서 미리 메세지를 구현하고, 이를 ios scheduler에 보내고자 하는 시각으로 등록해두면 자동으로 발송된다. 이때 scheduler에 등록된 이후로는 Ios가 모든 발송을 관리하기 때문에 앱 내부에서는 할 일이 없다. 따라서 로컬 알림의 대부분은 AppDelegate class에서 작업이 이루어진다. (life cycle method와 함께 쓰일 때가 많음) ios 10 이상부터는 UserNotification 객체를 사용하고,..
[C/LeetCode] Container With Most Water Daily LeetCoding Challenge April, Day 5 문제 높이가 배열로 주어졌을 때, 만들 수 있는 가장 넓은 사각형 영역의 크기 구하기 (width = 1로 고정) 아이디어: brute force 이중 배열을 돌면서 두개의 index를 선택하고 이를 통해 만들 수 있는 사각형의 크기와 max 값을 비교함 완성: time limit exceeded 눈물이 나게도 시간초과가 발생했다. int min(int a, int b) { return a height[..
[C/LeetCode] Swapping Nodes in a Linked List Daily LeetCoding Challenge April, Day 4 문제 linked list에서 앞에서 K번째, 뒤에서 k번째 요소를 swapping 아이디어: 직접 탐색 + linear 순회 먼저 linked list안에 몇개의 node가 있는지 확인해야 한다. 그래야 뒤에서 부터 몇번째는 몇번의 loop를 돌아야 하는지 계산 가능하기 때문. 총 n개의 node가 있다고 하면 (n-k+1) 번의 loop를 돌면 뒤에서부터 K번째 요소이다. 이 둘의 값을 바꾸면 된다. 예외 사항 1. K == 0 2. head == NULL 하지만 문제에서 1val; temp = head; index = 1; while (index++ next; val2 = tem..
IPC in LINUX - Shared Memory IPC 방법 중 shared memory를 사용하는 방법에 대해서 알아보자. shared memory에 대한 것은 다음 포스팅을 참고하면 좋다. process concept process가 무엇인가? process는 프로그램 실행 흐름의 가장 기본적인 단위이다. 다들 이렇게 설명하는데 사실 뭔 소린지 이해가 안갈 수 있다. 그럴때는 프로그램 실행을 위한 작업의 대상, 즉 os가 sc josushell.tistory.com Shared Memory는 IPC 중 가장 빠른 방식이다. message passing 처럼 데이터를 kernel에 copy해야하는 일이 없기 때문이다. 하지만 운영체제가 IPC에 개입하지 않는 만큼, 동기화는 개발자가 직접 맞추어야 한다. 즉 데이터가 없을 때 데이터를 읽는 접근에 대..
[swift] Property Wrapper: what does @ mean in swift? Property Wrapper 그게 왜 필요한데 swift에서는 struct, calss의 프로퍼티의 종류가 두 가지이다. 저장 프로퍼티 vs 연산 프로퍼티 로 구분된다. 이때 연산 프로퍼티는 값에 접근할 때 계산을 하거나 변환 작업을 해야할 때 사용된다. 즉 값을 검사하는 수문장이 있는 프로퍼티이다. 예를 들어, 다음과 같이 값의 최대 범위를 계산하여 막아주는 연산 프로퍼티가 있다고 생각하자. struct A { private var realValue: Int = 0 var value: Int { get { return realValue } set { if (realValue > 100) { realValue = 100 } else if (realValue < 0) { realValue = 0 } el..
[C/LeetCode] Valid PalindromeⅡ Daily LeetCoding Challenge April, Day 2 문제: Palindrome 가능 여부 확인 이때 최대 1개의 글자를 삭제 가능하다. 아이디어: Brute Force 문자를 제거할 수 있다는 것은 앞에서 비교할 때는 index+1, 뒤에서 비교할때는 index-1 하는 것이므로 두가지의 가능성이 있다. 따라서 둘 중에 하나가 true라면 palindrome인 것이다. 완성 submission: 44ms / 9.1MB bool checkValid(char *s, int start, int end) { while (start < end) { if (s[start] != s[end]) return false; start++; end--; } return true; } bool validP..