개발차

    [Swift] Binary Search Tree란? (1)

    Binary Search Tree는 (하나의 node가 최대 2개의 자식을 갖는) 트리가 항상 정렬되도록 추가/삭제를 수행하는 binary tree의 한 종류이다. "항상 정렬되어 있다"의 의미는 무엇일까? 위 트리를 봐보자. - parent node : 7 - left child : 2 - right child : 10 node를 기준으로 좌측의 키는 항상 작아야 하며, 우측의 키는 항상 커야한다. 그렇기에 각각의 child들은 정렬되어 있을 수 밖에 없는 것이다. (child의 child 또한 마찬가지) Insert 그렇다면 기존 트리에 새로운 node를 추가할 때는 어떻게 해야할까? 먼저 새로운 node 값을 추가할 때 roott node(최상단)의 값과 비교한다. 만약 새로 추가하고자 하는 값이 ..

    [LeetCode] String (2)

    String 타입 문제의 두 번째 시간. 1. Valid Anagram Anagram이라는 말을 처음 들어봤을 것이다. 아래의 예를 봐보자. "하녕안요세" 이 단어를 보면 생각나는 말이 있는가?? 배치를 좀 다르게 하면 "안녕하세요"가 된다. Anagram은 해리포터에서도 등장했었는데, TOM MARVOLO RIDDLE를 풀면 "I AM LORD VOLDEMORT" 로 바뀌는 장면이 있었다. 즉, A로 B를 만들 수 있는지를 체크하면 되는 문제이다. 이를 위해서는 원소의 갯수가 동일한지 파악해보면 된다. 바로 코드로 가자. class Solution { func isAnagram(_ s: String, _ t: String) -> Bool { // key & value로 묶기 위해 dictionary 사..

    [LeetCode] Strings (1)

    String 데이터 타입에 대한 문제들을 풀이해볼 것 이다. 1. Reverse String 말 그대로 문자열을 뒤집는 것이 문제이다. "ABCD"일 때, "DCBA"가 되도록 하는 것이다. 바로 코드로 봐보자. class Solution { func reverseString(_ s: inout [Character]) { // 그냥 s.reverse() 사용하면 풀리긴 함..! // 좌/우 인덱스를 정해준다. var left = 0 var right = s.count - 1 // 만나는 순간 끝낼 수 있도록 while left < right { // left 값 저장해두고 var temp = s[left] // left 값을 right 값으로 변경하고 s[left] = s[right] // 저장해둔 le..

    [LeetCode] Array (4)

    Array 파트 마지막 풀이! ------------------ 1. Best Time to Buy and Sell Stock II 주식을 사고 파는데 있어 저점에 사서 고점에 팔아 최대 이익을 남기기 위한 문제! 다음 원소의 가격보다 싸면 사서 팔아주면 된다! 바로 코드로 봐보자. class Solution { func maxProfit(_ prices: [Int]) -> Int { // 결과값 저장을 위한 변수 생성 var total = 0 var cnt = prices.count // 배열을 돌면서 저점 매수 고점 매도 진행 for i in 1.. [Int] { // nums1을 기준으로 Key와 Value 세팅 var standNums = Dictionary(nums1.map {($0, 1)}, ..

    [LeetCode] Array (3)

    오늘은 한 문제 풀이..! 1. Rotate Image 말 그대로 이미지를 시계방향으로 회전시키는 것이 목표이다. 이미지는 수의 배열들로 표현이 되기에, 결국엔 Matrix를 회전시키는게 목표이다! 머신러닝 공부를 하면서 transpose 개념을 조금 접해서 그런지 transpose하는 방법으로 생각해보았다. (numpy T 사용하고 싶은 욕구..) 우선 예시로 이해해보자. // Input 배열 [ 1, 2, 3 ] [ 4, 5, 6 ] [ 7, 8, 9 ] // Output 배열 [ 7, 4, 1 ] [ 8, 5, 2 ] [ 9, 6, 3 ] // 수행 과정 [ 1, 2, 3 ] [ 4, 5, 6 ] [ 7, 8, 9 ] // 1. 먼저 transpose [ 1, 4, 7 ] [ 2, 5, 8 ] [ ..

    [LeetCode] Array (2)

    Array 문제 풀이 두 번째 시간! 1. Rotate Array 배열을 회전시킨다...? 무슨 뜻일까.. 회전이라기 보다는 배열의 마지막 원소를 가장 맨 앞으로 옮기는 작업 요구하고 있다! (k의 수 만큼 원소들을 이동해줘야 한다.) // k = 3 [1,2,3,4,5,6,7,8] // [6,7,8,1,2,3,4,5] 가 된다. // [8,1,2,3,4,5,6,7] // [7,8,1,2,3,4,5,6] // [6,7,8,1,2,3,4,5] // 위 프로세스로 수행이 되는 형태이다! 하나씩 옮기면 될 것 같은 생각이 든다. class Solution { func rotate(_ nums: inout [Int], _ k: Int) { // k가 0이면 움직일 필요 없음 if (k == 0) { return..