전체 글 168

Swift Deep Dive: Instance Method & Type Method

가끔 개발 용어 중 나의 머리 속에 추상적으로 존재하고 있는 개념들이 있다. 오늘 나오는 이 둘 모두 그렇다... 인스턴스 메서드와 타입 메서드...! 이 둘에 대해서 조금 딥하게 알아보고자 한다. 메서드부터 시작하자 https://docs.swift.org/swift-book/documentation/the-swift-programming-language/methods/ Documentation docs.swift.org 공식 문서는 Method에 대한 정의로 시작한다. 🤖 인스턴스 혹은 타입에 속하는 함수들을 정의하고 호출하는 것. 🙋🏻‍♂️ 이런 개념에 입각한 용어는 암기하고 떠올리기가 어렵다. 그래서 우리는 보통 클래스, 스트럭트 등에 정의 되어있는 함수를 통틀어 메서드라고 부른다. 실제로 Doc..

카테고리 없음 2023.03.08

백준 10825번 Swift 알고리즘 연습 - 국영수_정렬

어려운 문제는 아니었는데 이상하게 정렬이 잘 안되었던 문제... 결국 여러번 시행착오를 거쳤지만 답은 나왔다! 이 문제를 풀면서 생각한 논리적 흐름은 모든 경우의 수를 고려해주면 된다. 국어 점수가 같지 않다면 국어 성적을 기준으로 내림차순 국어 점수가 같고 영어 점수가 다르면 영어 성적을 기준으로 올림차순 국어 점수가 같고 영어 점수가 같고 수학 점수가 다르면 수학 성정을 기준으로 내림차순 마지막으로 다 같다면 아스키 코드 값 순서대로 정렬해주면 된다. * 10825번 let n = Int(readLine()!)! var data: [(String, Int, Int, Int)] = [] for _ in 0.. $1.1 } else if $0.2 != $1.2 { return $0.2 < $1.2 } e..

백준 11650번 Swift 알고리즘 연습 - 좌표 정렬하기_정렬

11650번과 1181번은 사실 오래전에 푼 문제들이다. 난이도가 낮기도 했고 당시에 뭣도 모르고 그냥 수학 문제 풀듯이 알고리즘 하나씩 풀어볼까? 싶어서 풀었었다. https://whowantstoquit.tistory.com/74 백준 1181번 Swift 알고리즘 연습 N개의 문자열을 입력받고 각 문자열의 길이, 알파벳 우선순위에 따라 출력하는 문제이다. 중복을 피해야한다는 것도 신경써야한다! 이 문제를 풀면서 생각한 논리적 흐름은 N개의 string을 입력 whowantstoquit.tistory.com https://whowantstoquit.tistory.com/72 백준 11650번 Swift 알고리즘 연습 튜플을 사용하여 x좌표 먼저 값을 비교, y좌표 값을 다음으로 비교하여 정렬하는 문..

카테고리 없음 2023.03.06

백준 2750번 Swift 알고리즘 연습 - 수 정렬하기_정렬

브론즈2 문제인만큼 시간 복잡도를 따지지 않아도 되는 문제였다. 그래서 Swift에서 제공하는 Sort 기능을 써서 해결할 수 있는 문제였지만, 이 문제를 Sort를 사용하지 않고 풀어보기로 스터디에서 이야기가 나왔다. 확실히 정렬할 일이 있을땐 항상 Sort를 사용하여 문제를 해결하곤 했기에..! 한 번 고민해서 풀어봤다. 이 문제를 풀면서 생각한 논리적 흐름은 Stack의 관점에서 한 번 생각해봤다. 먼저 Stack1이 비어있으면 원소를 채워준다. 그 다음으로 들어올 값과 Stack1의 값을 비교해준다. 다음 값이 Last값 보다 크다면 Stack1에 append해서 순서를 정해준다. 만약 다음 값이 Last값보다 작다면 Last값을 remove하고 Stack2에 넣어준다. 그 후 다음 Last값과 ..

프로그래머스 Lv. 3 Swift 알고리즘 - 네트워크_DFS

간만에 프로그래머스 문제를 푸는것 같다... 그 동안 백준 문제를 풀었는데 프로그래머스가 확실히 백준보다 좀 쉬운거 같기도..? 하지만 이번 문제는 실제 난이도에 비해 푸는데 오래 걸리긴 했다 😇 이 문제를 풀면서 생각한 논리적 흐름은 네트워크가 연결되어 있으면 연결된 개체를 전부 묶어서 Count + 1 이다. 그렇다면 연결이 끊어질때까지 이어보자 -> DFS 항상 그렇듯이 vistied 배열을 만들어준다. 이때 우리는 n개의 컴퓨터의 각각 상황만 파악하면 되기 때문에 vistied를 2차원 배열이 아닌 1차원 배열로 만들어준다. A부터 시작하면 어디까지 연결될까? Try... B부터 시작하면 어디까지 연결될까? Try... 이렇게 반복인데 이때 A에서 시작했을 경우 B와 연결이 되어있었다면 이미 vi..

Swift Deep Dive: String은 왜 Subscripts로 접근할 수 없을까?

Subscipts가 뭔지부터 보자! 배열을 다룰때 빠지지 않는 개념이 있다. 바로 서브스크립트(Subscripts). 공식 문서에 나와있는 설명을 보니... 서브스크립트란 연속된 형태(sequence), 리스트 등의 집합 원소에 간단하게 접근할 수 있는, 클래스 / 구조체 / 열거형에서 정의할 수 있는 문법이다. 문장이 다소 길지만 결론은 Array나 Dictionary 등과 같은 집합 형태에 있는 원소들을 [](대괄호)를 이용하여 쉽게 불러올(접근할) 수 있다는 것이다. 공식 docs에 대한 정확한 해석은 아래 Github blog를 참고하면 좋습니다 (https://jusung.gitbook.io/the-swift-language-guide/language-guide/12-subscripts) 더보기..

백준 1941번 Swift 알고리즘 연습 - 소문난 칠공주_DFS

익숙해질만할 때 어려운 문제가 나왔다...! 이 문제는 고민을 거듭하다 결국 다른 분들의 코드를 많이 참고했는데 심지어 Swift로 된 코드는 없어서 Python 코드를 많이 참고했다..! 풀이를 보니 Combination, DFS+BFS, Backtracking 등등 다양한 개념을 혼합하여 사용해야했다. 어쩐지 BFS 하나로 안풀리더라니... 일단 기존에 풀어왔던 문제들과 제일 다른점은 현재 좌표에서 다음 좌표로 넘어갈 때 해당 지역의 값이 움직임에 영향을 전혀 미치지 않는다는 것이다. 즉, Y나 S에 상관없이 움직일 수 있었고 이때 이 모든 경로를 가능하게 하면 너무 많은 케이스가 발생하니 흔히 말하는 '가지치기'를 적용해야 했다. 그래서 dfs 함수를 사용할 때 Y가 4를 넘은 경우 바로 retur..

정적 메모리 할당(Static Memory Allocation)과 동적 메모리 할당(Dynamic Memory Allcoation)

최근 CS 스터디를 진행하면서 나왔던 이야기 중 Swift는 Heap에 메모리가 할당 될 땐 동적할당, Stack에 메모리가 할당 될 땐 정적할당이 발생하는 것 아니냐!? 하는 이야기가 나왔었다. 나는 그렇게 알고 있었는데... 스터디에서 함께 참고하는 Java & JS 서적에는 이런 글이 있었다. 스택에는 지역변수, 매개변수, 함수가 저장되고 컴파일 시에 크기가 결정되며 '동적'인 특징을 갖는다. 힙은 동적 할당할 때 사용되며 런타임 시 크기가 결정된다. 힙은 '동적'인 특징을 갖는다. 책에는 스택에는 동적으로 메모리가 할당된다는 말은 없고 '동적'인 특징을 갖는다는 말 만 나와있었고, 힙은 동적 할당 + '동적'인 특징까지 갖는다고 나와있었다. 여기서 좀 혼란이 왔다. 내가 알고 있는 것이 제대로 된..

TIL/CS(feat. Swift) 2023.02.24

컴파일타임(CompileTime)과 런타임(RunTime)

요즘 CS 공부를 하다가 종종 마주치는 것이 '컴파일 타임에 동작한다.'라는 표현이다. 물론 컴파일 타임은 인간이 사용하는 컴퓨터 언어(어셈블리어)를 컴퓨터가 이해할 수 있는 언어(기계어)로 변환하는 시간이 아닐까! 하는 어렷품함이 있다. 그리고 런타임이란 프로그램을 실행시키기 위해서 빌드되는 과정에 소요되는 시간이 아닐까..? 하는 생각도 있었다. 하지만 결국 결론은 누가 나에게 이 둘을 물어봤을 때 깔끔하게 답변할 수 없음을 깨달았다 ^-^... 확인해보자! 컴파일은 뭘까? Computer Science에서 컴파일은 프로그래밍 언어로 작성된 고급 소스 코드를 컴퓨터에서 실행할 수 있는 저급 기계 코드로 번역하는 과정을 의미한다. 이 번역 프로세스는 컴파일러라는 특수 프로그램에 의해 수행된다. 컴퓨터 ..

TIL/CS(feat. Swift) 2023.02.23

백준 10026번 Swift 알고리즘 연습 - 적록색약_BFS

원래 BFS 문제를 다시 풀때마다 함수를 만들어내는게 꽤나 오래 걸렸는데 이젠 좀 익숙해진거 같다. 다만 은근히 문제들마다 조건이 달라서 까딱 잘못하면 조건을 만족시키기 못하는 경우가 있으니 이를 유의하는게 좋겠다. 이 문제를 풀면서 생각한 논리적 흐름은 다른 BFS 문제들과 비슷한 과정을 겪는다. 우선 Graph를 그려주고, 움직일 수 있는 방향을 설정해준다. 그리고 내가 해당 위치를 방문했는지 안했는지 visited 배열을 이용해 확인해준다. 이 문제의 경우 적록색약인 경우 R과 G를 동일하게 판단해야하고 적록색약이 아닌 경우 R G B를 각각의 값으로 봐주어야 하기 때문에 bfs 함수에도 이를 반영해야한다. 따라서 colorWeak이 true인 경우 RG를 묶어서 한번에 이동하고 false인 경우는..