Algorithm(12)
-
[Leetcode/Easy] 역순 연결 리스트 (206. Reverse Linked List, Swift)
https://leetcode.com/problems/reverse-linked-list/ 🤔 문제 설명연결 리스트를 뒤집어라.head = [1,2,3,4,5]// [5,4,3,2,1] 💡 풀이 : 연결 리스트 추적하면서 뒤집기첫 번째 떠오른 방법은 연결 리스트를 처음부터 순차적으로 반복하면서 거꾸로 연결시키는 방법이다.ListNode의 next에 계속 새로운 값을 추가시키는 것이 아니라, 기존 값을 새로운 next에 계속 할당하는 (= 앞으로 계속 연결하는) 방법을 사용했다고 생각하면 되겠다.현재 값에 대한 새로운 노드 생성하기 (newNode = ListNode(node.val, rev)) 새로운 노드 뒤에 기존 노드 연결하기 (rev = newNode)순서대로 반복해야 하니까 다음 노드로 연결하..
2024.07.07 -
[Leetcode/Easy] 팰린드롬 연결 리스트 (234. Palindrome Linked List, Swift)
https://leetcode.com/problems/palindrome-linked-list/submissions/1312234161/ 🤔 문제 설명연결 리스트가 팰린드롬 구조인지 판별하라.팰린드롬에 대한 설명은 2024.06.27 - [Algorithm] - [Leetcode/Easy] 유효한 팰린드롬 (125. Valid Palindrome, Swift) 글 참조단, 노드 값의 범위는 다음과 같다. (0 head = [1,2,2,1]// true 💡 풀이 1 : Linked List를 Array로 변환해서 풀기 해당 문제는 입력값이 단일 연결 리스트(Singly-Linked List) 형태로 들어오기 때문에 Swift 문법에서 어떻게 사용하는지를 살펴봐야 한다.연결 리스트(Linked List)..
2024.07.07 -
[Leetcode/Easy] 주식을 사고팔기 가장 좋은 시점 (121. Best Time to Buy and Sell Stock, Swift)
https://leetcode.com/problems/best-time-to-buy-and-sell-stock/description/ 🤔 문제 설명prices[i]는 지정된 i 날의 주식 가격을 포함하고 있는 리스트입니다.여러분은 한 주식을 살 날을 선택하고 그 주식을 팔기 위해 미래에 다른 날을 선택함으로써 여러분의 이익을 극대화하고자 합니다.이 거래에서 얻을 수 있는 최대 이익을 반환하세요. 이익을 얻을 수 없으면 0을 반환하십시오.[7,1,5,3,6,4]// 5 : 2일차 1일 때 사서 5일차 6일 때 팔면, 5의 이익을 얻는다. 💡 풀이주식에서 최대 이익을 얻으려면, 기본 전제는 "최저가"에서 구매해 "최고가" 지점에서 팔아야 한다.그래서 각 시작점을 기준으로 끝에 까지 반복을 돌았을 때 만날..
2024.07.06 -
[Leetcode/Medium] 자신을 제외한 배열의 곱 (238. Product of Array Except Self, Swift)
https://leetcode.com/problems/product-of-array-except-self/description/ 🤔 문제 설명배열을 입력받아 output[i]가 자신을 제외한 나머지 모든 요소의 곱셈 결과가 되도록 출력하세요.숫자의 접두사 또는 접미사의 곱은 32비트 정수에 들어맞는 것을 보장합니다. 단, 나눗셈을 사용하지 않고 O(n) 시간에 실행되는 알고리즘을 작성해야 합니다.nums = [1,2,3,4]// [24, 12, 8, 6] 💡 풀이문제 가장 마지막줄에 나눗셈을 사용할 수 없다는 조건 때문에, 전체 곱을 구해두고 각 요소별로 자기 자신을 나누는 방법은 사용할 수가 없다. 그래서 결국은 누적 곱셈을 이용하는 풀이 방법을 생각했다.우선 입력 리스트 nums 길이에 맞는 re..
2024.07.06 -
[Leetcode/Easy] 배열 파티션 1 (561. Array Partition 1, Swift)
https://leetcode.com/problems/array-partition/description/ 🤔 문제 설명2n개의 정수 배열이 주어지면, n개의 묶음 min(a, b)의 합으로 만들 수 있는 가장 큰 수를 출력하세요.nums = [1,4,3,2]// 4 : min(1, 2) + min(3, 4) = 1 + 3 = 4 💡 풀이# 첫 번째 생각정말 단순하게 생각해보면, 입력받은 nums 배열을 정렬시킨 후 앞에서부터 두 쌍씩 페어를 시켜준 다음, 각 묶음에서 최소값들의 합을 구하면 올바른 답이 도출될 것이다.# 두 번째 생각하지만 생각해보면, 결국 min 함수를 적용하지 않고도 리스트를 정렬시켰다면 인덱스 값에 의해 값을 도출할 수 있다.nums[0], nums[2], nums[4]....값..
2024.07.05 -
[Leetcode/Medium] 세 수의 합 (15. 3Sum, Swift)
https://leetcode.com/problems/3sum/description/ 🤔 문제 설명배열 nums를 입력받아 합으로 0을 만들 수 있는 3개의 요소를 출력하세요.단, 결과 배열에는 동일한 요소가 들어가지 않으며, 중복된 삼중항이 포함되어서는 안 됩니다. nums = [-1,0,1,2,-1,-4]// [[-1,-1,2],[-1,0,1]] 💡 풀이일단 바로 생각나는 것은 반복문 3개를 중첩해서 사용하는 방법이었다.물론 그렇게 해도 올바른 답은 나오겠지만, 그 뻔한 방법 말고 지난번 풀이에서 사용했던 투 포인터 방법을 사용해볼려고 했다.순차적으로 들어온 nums 배열을 반복하면서 값을 하나 빼두고(i) 나머지 뒤의 값을 대상으로 앞 뒤에 포인터를 두어서sum값에 따라 음수라면 왼쪽에 있는 포..
2024.07.05