분류 전체보기
-
#selector 에 parameter 전달하기iOS 2020. 6. 4. 15:01
addTarget, UIGestureRecognizer 등을 사용할 때 action을 주기 위해 #selector를 사용합니다. 하지만 #selector를 사용할 때는 임의로 파라미터를 전달할 수가 없고 오직 sender 로 버튼이나 제스쳐 같은 대상만을 파라미터로 받을 수가 있습니다. 오늘 알아볼 방법은 원하는 파라미터를 전달할 수 없으니 대신 파라미터가 되는 대상을 원하는 아이로 바꾸는 방법입니다. 바로 예시를 살펴보겠습니다. \ swipe를 할 때 원하는 정보를 함께 전달하고 싶어요 \ 보통 일반적인 스와이프 제스쳐는 이렇게 생성합니다. override func viewDidLoad() { super.viewDidLoad() let swipeGesture = UISwipeGestureRecogniz..
-
1005. Maximize Sum Of Array After K NegationsAlgorithm/LeetCode 2020. 6. 4. 14:05
출처: leetcode.com/problems/maximize-sum-of-array-after-k-negations/ 분류: Greedy, Easy 접근방식 k번 동안 배열에서 숫자를 하나 선택해 양수 음수 값을 바꿔야 합니다. k번 반복 이후 배열의 합이 가장 큰 경우를 찾는 문제입니다. 배열에서 음수가 있으면 모두 양수로 바꿔주고 음수를 모두 바꾸고도 k가 남아있다면 가장 최소인 숫자를 찾아서 그녀석을 한 번만 바꿔주면 됩니다. 방법 자체는 어렵지 않은데 생각해야 할 경우들이 조금 있어서 많이 틀렸습니다. 😭 해결방법 우선 음수를 모두 바꿔주기 위해 오름차순으로 정렬 후 0번부터 다음 인덱스가 양수일 때까지 양수로 바꿔주고 인덱스를 증가시킵니다. 양수일 때가지 찾았는데, k가 아직 홀수번 남았다면 ..
-
1029. Two City SchedulingAlgorithm/LeetCode 2020. 6. 4. 13:17
출처: leetcode.com/problems/two-city-scheduling/ 분류: Greedy, Easy 접근방식 각 cost에는 A와 B에 보낼 수 있는 비용이 들어있습니다. 2N개의 비용이 적힌 costs에서 각각 N개씩 공평하게 A와 B에 나눌 때 최소비용을 찾는 문제입니다. costs가 [[10,20],[30,200],[400,50],[30,20]] 이렇게 주어져 있다면, A에 2개 B에 2개를 [ 10, 30, 50, 20 ]로 뽑아줄 때 가장 최소비용이 됩니다. 하지만 무작정 둘 중 최소를 찾아서 분배한다고 해서 최소비용을 보장할 수가 없습니다. costs 중에서 어떤 cost를 우선적으로 분배해줘야 할까요? 바로 둘의 차이가 큰 cost를 먼저 분배해줘야 나중에 더 작은 비용을 분배..
-
1046. Last Stone WeightAlgorithm/LeetCode 2020. 5. 31. 11:15
출처: leetcode.com/problems/last-stone-weight/ 분류: Greedy, Easy 접근방식 무게가 가장 큰 돌과 그 다음으로 큰 돌을 부시면서 1개의 돌이 남을 때까지 반복하는 문제 입니다. 두 돌의 무게가 같다면 그대로 없어지고 한쪽이 더 크다면 그 나머지가 다시 남은 돌이 됩니다. 문제는 두 돌을 골라서 부실 때마다 돌의 우선순위가 바뀐다는 점입니다. 즉, 매 스탭마다 가장 큰 돌이 바뀔 수 있다는 점이죠. 이 점을 잘 체크하면 되는 문제입니다. 해결방법 단순하게 매 스탭마다 max를 2번 뽑아서 제거해주는 방법을 사용할 수도 있겠으나, swift 기준으로 max의 시간복잡도가 O(n) 이고 max의 인덱스를 찾는데 O(n), 이를 제거하는데 O(n) 의 시간이 소요됩니다..
-
1217. Play with ChipsAlgorithm/LeetCode 2020. 5. 28. 13:40
출처: leetcode.com/problems/play-with-chips/ 분류: Greedy, Easy 접근방식 문제 자체를 이해하기가 어려웠던 문제였습니다. 간단히 요약하면, chips 에는 chip이 있는 index 가 적혀있습니다. 즉, chips = [2,2,2,3,3] 이렇게 주어져 있다면, 아래와 같은 모습으로 생각할 수 있습니다. 칩이 있는 인덱스 1 2 3 칩의 개수 0 3 2 이 칩들은 좌우로 2칸을 움직일 때는 비용이 없고 1칸을 움직일 때는 1의 비용이 듭니다. 여기서 이 칩을 한 곳으로 모으는 방법은 2가지 방법이 있습니다. 2에 있는 칩3개를 3으로 옮기는 방법 --> 비용 2 3에 있는 칩 2개를 2로 옮기는 방법 --> 비용 3 당연히 3을 2로 옮기는게 좋겠죠?? 다음으로..
-
1221. Split a String in Balanced StringsAlgorithm/LeetCode 2020. 5. 23. 21:34
출처: https://leetcode.com/problems/split-a-string-in-balanced-strings/ Split a String in Balanced Strings - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 분류: Greedy, Easy 접근방식 "L", "R"로 이루어진 문자열에서 짝이 맞는 문자열의 개수가 얼마나 되는지 찾는 문제입니다. 저는 처음에 L 과 R 의 개수를 저장하는 변수를 만들고 카운트 해주면서 둘이 같아지면 ba..
-
합병정렬 Merge sortAlgorithm/Theory 2020. 5. 14. 20:04
목표 합병 정렬을 이해한다. 합병 정렬을 Swift로 구현한다. 합병 정렬의 시간 복잡도를 이해한다. ( O(nlogN) ) 총 재귀 호출 횟수는 2n-1 합병 정렬 ? 합병 정렬은 분할정복 알고리즘의 하나입니다. 합병 정렬의 아이디어는 이미 정렬된 두 배열이 있다면 각 배열의 첫번째 원소끼리 비교해 정렬된 새로운 배열을 만들 수 있다. 에서 시작합니다. 이 정렬된 두 배열을 얻기 위해 일단 최대한 작게 쪼개고 다 쪼갰다면, 위의 아이디어를 이용해 정렬된 새로운 배열을 만들어 나가는 것이죠. 구체적으로 아래와 같은 과정을 거치게 됩니다. 1. 길이가 1 이하인 리스트는 정렬된 것으로 본다. 2. 분할(divide): 길이가 2이상이면 리스트는 반으로 쪼갠다. 3. 정복(conquer): 분할된 각 부분의..
-
Programmers) Lv2 가장 큰 수Algorithm/Programmers 2020. 5. 1. 11:06
출처: https://programmers.co.kr/learn/courses/30/lessons/42746 분류: Lv2, 정렬 접근방식 주어진 수로 만들 수 있는 가장 큰 수를 구하는 문제입니다. 처음엔 첫 자리부터 비교하려고 했었는데요, 이렇게 하면 매우 복잡해집니다. 우선 앞 자리부터 비교하기가 어렵습니다. 길이를 알면 자리수로 나눠볼텐데 그것도 안되고 뒤집자니 뒤가 0이라면 날라갈테고 문자열로 바꿔서 한 자리씩 비교하더라도 각각의 길이가 다르기 때문에 어렵습니다. 무작정 길이가 짧다고 앞에 둘 수가 없습니다. 가령, [5, 559] 가 있다면 5559 < 5595 가 되어버립니다. 중간에 0이 껴있는 경우는 어떻게 처리 할 것이며... 네 첫 단추를 잘못 끼웠습니다... 결국 다른 분들의 풀이를..