Container With Most Water
·
PS/LeetCode
문제https://leetcode.com/problems/container-with-most-water/description/입력n == height.length2 결과ans: Int = 물을 담을 수 있는 최대 면적해석백준에서 풀어봤던 기억이 있었던 것 같다.위 문제 역시 전형적인 투 포인터 형식이므로 포인터를 이동시키는 조건을 빠르게 찾는다.두 포인터를 양쪽 끝에 위치 시키고 높이가 낮은 것을 옮긴다. 이유는 담을 수 있는 높이는 두 높이 중 최소 높이로 측정되므로 낮은 높이를 옮겨 다음 검사에서는 더 높은높이를 확보하는 것 코드class Solution { func maxArea(_ height: [Int]) -> Int { let n = height.count va..
3Sum
·
PS/LeetCode
문제https://leetcode.com/problems/3sum/description/입력3 결과ans: [[Int]] = 중복되지 않은 3개 숫자의 합이 0이되는 조합 배열 ex) [[-1,-1,2],[-1,0,1]]해석2포인터 개념에 하나의 트릭을 숨겨논 문제로 해석된다.3개의 합이 0이되는 지 검사해야하는데 2포인터로 접근하려면 어떻게야할까 ?? 간단하게 한개를 고정하고 나머지 2개만 움직이면 된다. 배열의 길이가 최대 3000이므로 정렬을 통해 조금 더 쉽게 포인터를 움직일 수 있는 전처리를 수행한 후 중복이 허용되지 않으므로 같은 값이 있을 경우 과감히 다음 값으로 넘어간다. 여기서 내가 고정할 값은 i 이며 , j를 바로 i 다음, j를 오른쪽 끝에서 시작해서 조건에 맞게 움직이자.코드cla..
리팩토링 결과 발표
·
iOS
👋 들어가기 전회사에서 굵직한 스프린트가 하나 마무리되어 오늘은 오랜만에회고를 하는 시간을 가지려한다. 회고 내용은 바로 어제 iOS 개발 팀 앞에서 발표한 나의 리팩토링 경험이다.리팩토링을 하며 배운점과 느낀점을 중심으로 돌아보려한다.✊무엇을 리팩토링 했는가?12월 10일에 일을 시작한 나의 첫 스프린트 임무는 MVP를 증명할 수 있는 앱을 2주만에찍어내야했다. 하지만 크게 3가지 문제가 있었다.  1. 미리 짜여져있는 코드미리 짜여있는 코드를 그대로 가져가야하는 지, 내가 다시 짜야하는 지 결정이 빠르게 되지 않았다.게다가 짜여있는 코드 조차 iOS개발을 주로 하신분이 아니라 코드를 이해하는데도 생각보다 오래걸렸다. 2. 자신없는 UI Framework UIKit을 자주 사용했던 나와 달리 미리 짜..
Search in Rotated Sorted Array
·
PS/LeetCode
문제https://leetcode.com/problems/search-in-rotated-sorted-array/description/입력1 결과ans: Int = target이 위치한 인덱스, 먄약 없다면 -1해석이전 문제와 비슷한 이분탐색 문제지만 오름차순의 배열이 회전되어 있어 한번 더 조건을 걸어줘야한다. 그 조건은 이분탐색의 필수적인 조건인 정렬 여부, 즉 mid를 중심으로 정렬이 올바르게 되어있는 구간인가 아닌가를  판별 또한 mid를 통해 찾을 것이기 때문에, while문의 조건이 가 아닌 된다.코드class Solution { func search(_ nums: [Int], _ target: Int) -> Int { let n = nums.count var ..
Find Minimum in Rotated Sorted Array
·
PS/LeetCode
문제https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/description/입력n == nums.length1 결과ans: Int = 배열의 최솟값해석정렬이 됐지만 회전까지 들어가 있어 문제의 본질을 파악하는데 함정을 파뒀다.하지만 시간 복잡도 제약이 O(logn)인 것을 보고 이분 탐색이라는 것을 눈치 챌 수 있었다. mid를 기준으로 right 값이 큰지 작은 지를 판단하여크다면 오른쪽 부분은 버려주는 형식으로 진행코드class Solution { func findMin(_ nums: [Int]) -> Int { let n = nums.count if n == 1{ return n..
Maximum Product Subarray
·
PS/LeetCode
문제https://leetcode.com/problems/maximum-product-subarray/description/입력1 결과ans: Int = 곱 부분 배열의 최댓값해석이전 maxSubarray는 단순 합이라, 흐름이 하나였지만곱은 말 그대로 음수와 양수에 따른 흐름이 2개이므로 변수가 하나 더 필요했다.그래서 음수를 고려한 최대 음수 변수와, 최대 양수 변수를 계속 가져가며 반복마다 갱신한다.코드class Solution { func maxProduct(_ nums: [Int]) -> Int { let n = nums.count if n == 1 { return nums[0] } var minProduct = nums..