본문 바로가기

자료구조&알고리즘26

swift 리트코드 문제풀이 - leetcode 24 페어의 노드 스왑 swift 리트코드 문제풀이 - leetcode 24 페어의 노드 스왑 24. Swap Nodes in Pairs 문제 연결 리스트를 입력받아 페어 단위로 스왑(Swap)하여라. 문제의 이해 문제 내용을 한번 살펴보면! 문제의 제시문 그대로다... 인자로 연결 리스트가 주어지고, 우리는 우리가 구현할 함수 안에서 이 주어진 연결 리스트 안의 노드들의 값을 둘씩 짝을 지어서 서로 교환해서 리턴해주면 된다. 예를 들어 위의 그림에서 1,2,3,4 연결리스트가 들어왔으면 둘씩 짝을 지으면 (1,2) (3,4) 이렇게 짝을 지을 수 있다. 그리고 짝지어진 노드들을 서로 바꾸면 (2,1) (4,3) 이렇게 작성할 수 있겠다. 자 그럼..! 풀이 시나리오 [1] 일단 연결리스트의 모든 노드들을 스캔해야 되기 때문에.. 2022. 8. 4.
swift 리트코드 문제풀이 - leetcode 206 역순 연결리스트 swift 리트코드 문제풀이 - leetcode 206 역순 연결리스트 206. Reverse Linked List 문제 연결리스트를 뒤집어라 얼핏보고 좀 간한하네? 라고 생각했다. 연결리스트의 point를 이용해서도 뒤집을 수 있을 것 같은데 이번에도 swift의 배열을 이용해보기로 했다. 1.함수안에 빈배열을 선언한다. 2.입력 받은 연결 리스트를 while문을 돌면서 배열에 값을 넣어준다. 3.배열을 뒤집는다. 4.배열안의 요소를 연결리스로 만들어 준다. 끝~! 위의 아이디어를 토대로 소스코드를 작성해보았다. public class ListNode { public var val: Int public var next: ListNode? public init() { self.val = 0; self.n.. 2022. 8. 3.
swift 리트코드 문제풀이 - leetcode 21 두 정렬 리스트의 병합 swift 리트코드 문제풀이 - leetcode 21 두 정렬 리스트의 병합 leetcode 21. Merge Two Sorted Lists 문제 아래 처럼 정렬이 되어 있는 두 연결 리스트를 합하라. 위의 그림에서 빨간색 연결리스트를 A 연결리스트라고 하고 보라색 연결 리스트를 B라고 해보자 리트코드 swift 답쓰기란을 보면 아래와 같은 함수가 주어진다. 아래 함수를 호출 할때 연결리스트 A와 연결 리스트 B를 인자로 전달하면 아래 함수는 두 A,B 연결리스트 안의 숫자들을 비교해서 오름차순으로 정렬한 새로운 연결리스트 C를 리턴해주면된다. func mergeTwoLists(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? { return } 일단 문제를 보자마자 든.. 2022. 8. 3.
swift 리트코드 문제풀이 - leetcode 234 팰린드롬 연결 리스트 - ver.2 swift 리트코드 문제풀이 - leetcode 234 팰린드롬 연결 리스트 - ver.2 leetcode 234. Palindrome Linked List 이전 포스팅에서 연결 리스트를 이용한 팰린드롬 체크 문제를 while문과 배열을 이용해서 풀어보았다. (swift 리트코드 문제풀이 - leetcode 234 팰린드롬 연결 리스트) 이번 포스팅에서는 다른 방법을 이용해서 팰린드롬 연결 리스트 문제를 풀어볼려고 한다. 준비 코드는 이전 포스팅에서 설명을 했으므로, 이번 포스팅에서는 간단히 코드만 작성해놓는다... 아래와 같은 연결 리스트가 있고, 이 연결 리스트의 값이 팰린드롬인지 확인을 해보자. 즉 거꾸로해도 같은 값인지 체크를 하는 것이다. let nodeFive = ListNode(1) let .. 2022. 8. 1.
swift 리트코드 문제풀이 - leetcode 234 팰린드롬 연결 리스트 swift 리트코드 문제풀이 - leetcode 234 팰린드롬 연결 리스트 leetcode 234. Palindrome Linked List 예제 이번에는 문제를 풀기전에 연결 리스트가 어떤 자료구조인지 알고 있어야 된다.. 연결 리스트의 장단점과 특징을 알고 있어야 되고, 연결 리스트를 코드로 간단하게라도 구현 할 수 있어야 한다. 아니면 최소 연결 리스트 코드를 보고 이해할 정도만되어도 될것 같다! 왜냐면 leetcode에서 연결 리스트의 노드에 해당하는 코드를 제공해 주기 때문이다. 아래 코드 처럼 연결 리스트의 각각의 Node에 해당하는 class 를 제공해준다. 그렇기 때문에 우리는 ListNode 클래스를 어떻게 사용해서 문제를 풀건지만 생각하면 된다. public class ListNode.. 2022. 8. 1.
swift 리트코드 문제풀이 - leetcode 238 자신을 제외한 배열의 곱 swift 리트코드 문제풀이 - leetcode 238 자신을 제외한 배열의 곱 leetcode 238. Product of Array Except Self 문제 배열을 입력받아 output[i]가 자신을 제외한 나머지 모든 요소의 곱셈 결과가 되도록 출력하라. 예제 Input: nums = [1,2,3,4] Output: [24,12,8,6] 예제 Input: nums = [-1,1,0,-3,3] Output: [0,0,9,0,0] 처음에 문제를 봤을때 쉽네? 라고 생각했다...ㅋㅋ ㅋㅋㅋㅋㅋ ㅋㅋㅋㅋ ......... ....... 반복문과 스위프트의 reduce 함수를 이용해서 반복문에서 자신은 * 1을 하고 나머지 숫자는 reduce를 이용해서 전부 곱해버리는 로직을 생각했다. 아래처럼 간단하게 .. 2022. 7. 27.
swift 리트코드 문제풀이 - leetcode 42 빗물 트래핑 swift 리트코드 문제풀이 - leetcode 42 빗물 트래핑 leetcode 42. Trapping Rain Water 문제 높이를 입력받아 비 온 후 얼마나 많은 물이 쌓일 수 있는지 계산하라. 처음 문제를 보고 이해하는데 시간이 좀 오래 걸렸다. 일단 주어진 파라미터는 벽 높이가 담긴 배열 하나 이다. [0,1,0,2,1,0,1,3,2,1,2,1] 이 배열에서 하나하나의 숫자는 벽의 높이라는것을 알아두자. 그럼 조건을 한번 생각보자. 조건1. 벽과 벽사이에 빗물이 찰 수 있는 공간이 있어야 될것 같다. 여기서 중요한건 벽과 벽사이!! 그림에서 보면 첫번째 공간에도 빗물이 차야될것 같지만 그렇지 않다. 왜냐면 오른쪽 벽(index1) 만 존재 하기 때문이다. index 1번과 index 3 번째 .. 2022. 7. 26.
swift 리트코드 문제풀이 - leetcode 1 두 수의합 swift 리트코드 문제풀이 - leetcode 1 두 수의합 leetcode 1. Two Sum 문제 덧셈하여 타겟을 만들 수 있는 배열의 두 숫자 인덱스를 리턴하라. 예제 1: Input: nums = [2,7,11,15], target = 9 Output: [0,1] 예제 2: Input: nums = [3,2,4], target = 6 Output: [1,2] 예제 3: Input: nums = [3,3], target = 6 Output: [0,1] 이번 문제의 난이도는 어려운 편은 아닌듯. 주어진 파리미터는 두개임. 배열 = [2,7,11,15] 과 타겟숫자 9. 배열안의 숫자 2개를 더해서 9가되는 숫자 두개를 배열로 반환하면 됨. 바로 생각난 아이디어는 기준 숫자를 하나 정하고, 기준 숫자.. 2022. 7. 26.
swift 리트코드 문제풀이 - leetcode 49 그룹 애너그램 swift 리트코드 문제풀이 - leetcode 49 그룹 애너그램 leetcode 49. Group Anagrams 문제 문자열 배열을 받아 애너그램 단위로 그룹핑을 하세요. 예제 Input: strs = ["eat","tea","tan","ate","nat","bat"] Output: [["bat"],["nat","tan"],["ate","eat","tea"]] 일단 애너그램이라는 용어가 생소할 수 있는데, 쉽게말하면 하나의 단어가 있으면 이 단어의 문자를 재배열 해서 다른 뜻을 가진 새로운 단어로 바꾸는 것임. [nat, tan] 을 보면은 a, n, t 문자가 하나씩 똑같이 들어있는것을 알 수 있음. 그리고 순서만 바뀌어서 그룹핑되어 있다는 것을 캐치할 수 있음. 그래서 단순히 떠오르는 아디어는 .. 2022. 7. 24.