본문 바로가기

분류 전체보기282

[LeetCode] 797. All Paths From Source to Target (swift) All Paths From Source to Target - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 풀이 0번 부터 시작하여 n-1번까지 가는 경로를 모두 찾으면 되는 문제다. 입력 받은 graph에서 0번 꼭짓점과 연결된 꼭짓점부터 dfs를 탐색하도록 했다. // 0번 부터 탐색 시작 for vertex in graph[0] { dfs(vertex, [0, vertex], graph) } 비슷한 방식으로 dfs 함수 내에서 vertex와 연결된 꼭짓점으.. 2021. 10. 13.
[Swift] Chapter 24. 타입 중첩 스위프트에는 타입 내부에 타입을 정의하고 구현할 수 있다. 이처럼 타입 내부에 새로운 타입을 선언해준 것을 중첩 타입(Nested Type)이라고 부른다. 타입 내부에 새로운 타입을 정의하고 싶다면, 자신의 정의 내부에 새로운 타입을 정의하고 구현해주기만 하면 된다. 24.1 중첩 데이터 타입 함수 중첩처럼 클래스 내부에 새 클래스, 클래스 내부에 새 구조체, 구조체 내부에 새 열거형 등의 타입을 중첩해서 타입 내부에 새 타입을 정의할 수 있다. /* 코드 24-1. 중첩 데이터 타입 구현 */ class Person { enum Job { case jobless, programmer, student } var job: Job = .jobless } class Student: Person { enum S.. 2021. 10. 13.
[Swift] Chapter 23. 프로토콜 지향 프로그래밍 23장 - 프로토콜 지향 프로그래밍 스위프트의 표준 라이브러리에서 타입과 관련된 것을 살펴보면 대부분이 구조체로 구현되어 있다. 구조체는 상속이 되지 않지만 프로토콜과 익스텐션, 제네릭 등으로 다양항 공통 기능을 갖도록 구현할 수 있다. 23.1 프로토콜 초기구현 익스텐션은 기존 타입의 기능을 확장하며, 프로토콜은 프로토콜을 채택한 타입이 원하는 기능을 강제로 구현한다. 그런데 특정 프로토콜을 정의하고 여러 타입에서 이 프로토콜을 준수하게 만들어 타입마다 똑같은 메서드, 프로퍼티, 서브스크립트 등을 구현해야 한다면 많은 코드를 중복 사용해야 하며, 유지보수는 힘들어 질 것이다. 이때 필요한 게 바로 익스텐션과 프로토콜의 결합이다. [코드 20-5]에서 중복 코드를 제거해보자. /* 코드 23-1. 익스텐.. 2021. 10. 13.
[Swift] Chapter 22. 제네릭 제네릭을 이용해 코드를 구현하면 어떤 타입에도 유연하게 대응할 수 있다. 또한 제네릭으로 구현한 기능과 타입은 재사용하기도 쉽고, 코드의 중복을 줄일 수 있기에 깔끔하고 추상적인 표현이 가능하다. 제네릭을 사용하고자 할 때는 제네릭이 필요한 타입 또는 메서드의 이름뒤의 사이에 제네릭을 위한 타입 매개변수를 써주어 제네릭을 사용할 것임을 표시한다. 제네릭을 사용하고자 하는 타입 이름 제네릭을 사용하고자 하는 함수 이름 (함수의 매개변수...) /* 코드 22-2. 프로토콜과 제네릭을 이용한 전위 연산자 구현과 사용 */ prefix operator ** prefix func ** (value: T) -> T { return value * value } let minusFive: Int = -5 let fi.. 2021. 10. 13.
[고득점 Kit (DFS/BFS)] 여행경로 (python, swift) 코딩테스트 연습 - 여행경로 [["ICN", "SFO"], ["ICN", "ATL"], ["SFO", "ATL"], ["ATL", "ICN"], ["ATL","SFO"]] ["ICN", "ATL", "ICN", "SFO", "ATL", "SFO"] programmers.co.kr 풀이 dfs를 이용해서 문제를 해결했다. 먼저 "ICN"부터 시작해서 전체 티켓을 체크한다. 티켓을 체크해가며 여행 경로를 담아두고 전체 티켓을 다 사용했을 때 현재 찾은 경로와 이전에 찾은 경로를 비교 하여 현재 찾은 경로가 알파벳 순서가 앞설 경우 찾은 경로를 변경한다. python은 단순히 이전에 찾은 경로 배열과 현재 찾은 경로 배열을 연산자 비교를 통해서 어떤 경로가 알파벳 순서를 앞서는지 알 수 있지만 swift에서는.. 2021. 10. 12.
[고득점 Kit (DFS/BFS)] 단어 변환 (python, swift) 코딩테스트 연습 - 단어 변환 두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수 programmers.co.kr 풀이 문제에서 가장 짧은 변환 과정이라고 했으므로 최단 거리를 찾기 위해 bfs를 활용했다. 큐에는 총 3가지 정보를 넣어줬다. (현재 단어, 변환 횟수, 현재 단어의 인덱스)이다. 초기에는 인덱스에 -1을 넣어줬다. 인덱스의 경우는 checked 배열에서 사용하기 위해 넣어줬다. 주어진 words의 for문을 돌면서 현재 단어에서 다음 단어로 변환을 한 적이 있는지를 체크한다. 큐를 돌면서 target 단어를 만나면 .. 2021. 10. 11.