알고리즘(45)
-
[Leetcode/Medium] 두 수의 덧셈 (2. Add Two Numbers, Swift)
https://leetcode.com/problems/add-two-numbers/ 🤔 문제 설명음이 아닌 정수를 나타내는 두 개의 연결 리스트가 제공된다.각 연결 리스트는 역순으로 저장되어 있으며, 두 숫자를 더하고 합계를 연결 리스트로 반환하라.l1 = [2,4,3], l2 = [5,6,4]// [7,0,8] (342 + 465 = 807) 💡 풀이첫 번째 생각했던 방식은 아래와 같다. *조금 복잡하니까 읽어보고 싶은 사람만 천천히 읽어볼 것l1과 l2를 끝에까지 이동하면서 각각을 배열로 저장한 후, reversed로 뒤집고, 정수로 바꾼다. (ex. [2,4,3] -> [3,4,2] -> 342)두 정수 값을 더하고, 다시 배열로 저장한 후, reversed로 뒤집는다. (807 -> [8,0,..
2024.07.10 -
[Leetcode/Medium] 페어의 노드 스왑 (24. Swap Nodes in Pairs, Swift)
https://leetcode.com/problems/swap-nodes-in-pairs/ 🤔 문제 설명연결 리스트를 입력받아 인접한 두 노드(페어 단위)마다 교환(스왑)하고 연결 리스트를 반환해라.단, 노드 자체만 변경할 수 있으며, 리스트의 노드 값을 수정해서는 안된다.head = [1,2,3,4]// [2,1,4,3] 💡 풀이예시 문제를 기준으로 바꿔야 하는 값이 어떤 것인지만 헷갈리지 않고, 차근차근 코드를 짜면 해결할 수 있었다.a->b->c 연결 리스트를 b->a->c로 바꿔주는 경우를 생각해 보자. 반복하는 대상(moveNodes)은 두 칸씩 이동하도록 한다. (반복 시에는 moveNodes.next값도 nil이 아니어야만 swap할 수 있음)앞의 값을 first = a, 뒤의 값을 se..
2024.07.10 -
[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