📠 문제Container With Most Water난이도: Medium주어진 배열에서 양 끝점으로 한 가장 큰 직사각형의 넓이를 구하는 문제Input: height = [1,8,6,2,5,4,8,3,7]Output: 49Explanation: The above vertical lines are represented by array [1,8,6,2,5,4,8,3,7]. In this case, the max area of water (blue section) the container can contain is 49.💡 풀이첫 번째로 가장 무식하게 모든 경우의 수를 체크하는 방법이 있다. 물론 n의 입력값이 10^5이기 때문에 시간초과!func maxArea(_ height: [Int]) -> Int ..
📠 문제Clone Graph난이도: Medium주어진 그래프를 깊은 복사하는 문제이다.class Node { public int val; public List neighbors;}Input: adjList = [[2,4],[1,3],[2,4],[1,3]]Output: [[2,4],[1,3],[2,4],[1,3]]💡 풀이어어...? 이 문제를 풀면서 살짝 당황했다. 당연히 쉽게 생각했던 깊은 복사가 생각보다 쉽지 않구나라는 것을 알게 되었다. 왜냐하면 새로운 객체를 생성하면서 연결된 객체들을 다시 연결해줘야 하기 때문에 이것이 생각보다 까다롭다. 문제에서 가지고 있는 val을 key로 사용하고 새롭게 인스턴스를 만들면 된다. 만약 val이 없다면 Swift는 ObjectIdentifier를 ..
문득 TCA로 개발을 하려다가 TCA의 경우 특정한 템플릿이 존재한다는 것을 알게 되었고, 이것을 Xcode로 빠르게 만들 수 없을까? 하는 생각에서 템플릿을 적용해 보기로 했다.🎉 결과물개선이 필요하겠지만 첫번째 템플릿은 아래와 같이 Feature이라는 이름을 넣게 되면 자동으로 @Reducer struct Feature { ... } 와 FeatureView 가 생성된다. Feature 대신 다른이름을 넣으면 그 이름 그대로 만들어 준다. Preview도 간단하게 만들었다.🚧 과정과정은 생각보다 요상하게 안되는 것들이 있어서 조금 고생한 것 같다. 우선 Swift 코드는 아래와 같이 만들었다. ___VARIABLE_productName___ 은 내가 입력한 텍스트 값으로 대치된다.import Co..
📠 문제Longest Palendromic Substring난이도: Medium문자열 s가 주어질 때, s에서 가장 긴 팰린드롬 부분 문자열을 찾는 문제이다.팰린드롬이란, 앞에서 읽든 뒤에서 읽든 같은 문자열을 말한다.Input: s = "babad"Output: "bab"Explanation: "aba" is also a valid answer.💡 풀이결국 팰린드롬은 중심을 기준으로 대칭이 되어야 한다. 팰린드롬의 종류는 두가지인데 aa처럼 짝수로 된 팰린드롬이 있을 수 있고, aba처럼 홀수로 된 팰린드롬이 있을 수 있다. 따라서 중심으로부터 펼쳐(?)나가는 식으로 코드를 작성하면 O(n^2)의 시간복잡도로 구할 수 있다.func longestPalindrome(_ s: String) -> Str..
📠 문제Longest Consecutive Sequence난이도: Medium정수 배열이 주어질 때, 정렬하지 않고 가장 긴 연속 수열의 길이를 구하는 문제이다.Input: nums = [100,4,200,1,3,2]Output: 4Explanation: The longest consecutive elements sequence is [1, 2, 3, 4]. Therefore its length is 4.💡 풀이처음에 오름차순, 내림차순이 생각나기 때문에 정렬을 할 수 있는데 정렬을 하는 순간 O(nlogn)이 되어버린다. 이 문제의 핵심은 O(n)으로 푸는 것이다. (문제에서 You must write an algorithm that runs in O(n) time. 라고 나와있다) 생각해보면 단순..
🔎 KMP문자열 검색에서 널리 사용되는 알고리즘 KMP를 알아보자. 우선 이름이 KMP인 이유는 개발자인 Knuth, Morris, Pratt의 이름을 따왔다고 한다. 이름에 큰 의미는 없다! 한번 알아보자! Algoritmo di Knuth-Morris-Pratt - WikipediaDa Wikipedia, l'enciclopedia libera. L'algoritmo di Knuth-Morris-Pratt (spesso abbreviato come algoritmo KMP) è un algoritmo di pattern matching su stringhe, che permette di trovare le occorrenze di una stringa (pattern) P {\displaystyle..
🤔 글을 시작하며Swift를 쓴다면 map, flatMap, compactMap정도는 알 것이다. 이 글에서는 이 세 개의 차이를 말하기보단 세부 구현에 대해서 알아보고자 한다. 차이만 알고 싶다면... 아래의 예시만 참고하면 될 것 같다. map은 배열을 1:1로 다른 타입으로 매핑한다.let numbers = [1, 2, 3]let strings = numbers.map { "\($0)" }// ["1", "2", "3"]compactMap은 배열을 1:1로 다른 타입으로 매핑하면서 nil값은 없애준다.let strings = ["1", "2", "삼", "4"]let numbers = strings.compactMap { Int($0) }// [1, 2, 4]flatMap은 배열을 펼쳐준다.let..
🤔 간단한 실험아래의 코드를 실행시키면 어떻게 될까?let numbers = [1,2,3,4,5,6]numbers.forEach { number in if number == 2 { return } print(number)}당연하게도 2를 제외한 1, 3, 4, 5, 6이 출력될 것이다. 그렇다면 아래의 코드는?for number in numbers { if number == 2 { return } print(number)}바로바로 아래와 같이 오류가 발생하게 된다.엇 두개의 정확한 차이가 뭘까?🧑🏻💻 내부 구현Swift는 오픈소스이기 때문에 내부구현을 찾아볼 수 있었다. swift/stdlib/public/core/Sequence.swift at 376651df4db8d76..