반응형 전체 글282 [Swift] 공식 문서에서 상속 관계, 프로토콜 채택 여부 확인하기 Set 관련 포스팅을 하다가 Array가 Sequence 프로토콜을 채택한다는 걸 공식문서에서 확인하고 싶었는데 어디에 적혀있는지 찾을 수가 없었다. 프로퍼티랑 메소드 파트가 너무 길어서 끝까지 내려가 본 적이 없었는데, 페이지 제일 끝에 적혀있었다... 공식 문서 각 페이지의 맨 아래로 가보면 Relationships라는 챕터에 상속, 채택한 프로토콜 목록이 아래와 같이 나와있다. 타고 타고 상속받거나 채택할 수 있어서 잘 찾아봐야 한다. 위에서 언급한 Array의 경우에는 MutableCollection 프로토콜을 채택하는데, 이 MutableCollection 프로토콜은 Collection을 상속받고, 또 이 Collection이 Sequence를 상속받아서 결론적으로 Array가 Sequnce 프.. 2022. 2. 5. [Swift] 배열에서 중복 제거하기 Set 사용 Set의 성질을 이용한다. 집합 내에는 중복 원소가 존재하지 않으므로, 간단하게 Array를 가지고 집합 Set을 생성하면 중복이 제거된다. Array를 Set으로 Set의 이니셜 라이저 중에 Sequence를 받아 Set을 만들어주는 것이 있다. Array도 Sequence 프로토콜을 준수하므로 이것을 사용하면 된다. init(_ sequence: Source) where Element == Source.Element, Source : Sequence 예시 코드 중복이 포함된 Array을 가지고 Set를 만드는 코드이다. 중복되는 원소들이 제거되고 1, 2, 3, 4, 5만 남은 것을 확인할 수 있다. 단, Set은 원소들 간 순서가 없는 unordered collection이기 때문에 배.. 2022. 2. 5. 백준 16946번 벽 부수고 이동하기 4 - 스위프트(Swift) 풀이 + 그림 설명 1. DFS를 돌면서 인접한 빈칸들을 union 한다. 2. union 할 때 각 집합의 크기를 기록해둔다. 3. 각 벽마다 상하좌우의 빈칸 집합의 크기를 더한다. 1. DFS를 돌면서 인접한 빈칸들을 union 한다. 빈칸들이 인접해있으면 인접한 빈칸을 모두 방문할 수 있다. 따라서 인접한 빈칸들을 유니온 파인드를 사용해 하나의 집합으로 처리해준다. 2. union 할 때 각 집합의 크기를 기록해둔다. 방문할 수 있는 빈칸의 개수를 알아야 하기 때문에 각 집합의 크기를 구해둬야 한다. 두 집합을 union 할 때 크기도 같이 합쳐서 기록해두자. 3. 각 벽마다 상하좌우의 빈칸 집합의 크기를 더한다. 어떤 벽을 부수면, 벽 때문에 막혀있던 상하좌우 칸들이 연결되게 된다. 따라서 어떤 벽을 부쉈을 때 방문.. 2022. 2. 5. 백준 16724번 피리 부는 사나이 - 스위프트(Swift) 풀이 + 그림 설명 1. DFS를 돌면서 이어져있는 칸들을 Union한다. 각 집합마다 SAFE ZONE은 한 개만 있으면 된다. 2. 이미 방문한 점이더라도 Union은 하고 넘어간다. 3. 집합의 개수가 곧 SAFE ZONE의 개수이다. 1. DFS를 돌면서 이어져있는 칸들을 Union한다. 각 집합마다 SAFE ZONE은 한 개만 있으면 된다. 어떤 칸들이 하나의 경로로 이어져있다면 결국 경로 중 어느 칸에서 출발하더라도 계속 가다 보면 그 경로의 끝 칸에 도달하게 된다. 따라서 그 끝 칸에만 SAFE ZONE을 설치하면 된다. 한 경로로 이어져 있는 칸들을 하나의 집합으로 처리하기 위해 유니온 파인드를 사용한다. DFS를 돌면서 한 경로로 이어져있는 칸들을 모두 union 해준다. 2. 이미 방문한 점이더라도 Uni.. 2022. 2. 5. 백준 1766번 문제집 - C++(cpp) 풀이 1. 각 문제를 그래프의 정점으로 생각한다. 2. A번 문제를 B번 문제보다 먼저 푸는 것이 좋다면 A에서 B로 가는 방향 간선을 추가한다. 3. 우선순위 큐를 가지고 위상 정렬한다. 1. 각 문제를 그래프의 정점으로 생각한다. 선행 관계가 주어진 작업들의 작업 순서를 결정하는 것은 위상 정렬로 풀 수 있다. 먼저 주어진 상황을 그래프로 변환해야 한다. 각 문제를 정점으로 생각해준다. 2. A번 문제를 B번 문제보다 먼저 푸는 것이 좋다면 A에서 B로 가는 방향 간선을 추가한다. 그리고 A가 B보다 선행되어야 한다면, A에서 B로 가는 방향 간선을 추가한다. 3. 우선순위 큐를 가지고 위상 정렬한다. 완성된 그래프를 가지고 위상 정렬을 수행한다. 그런데 "가능하면 쉬운 문제부터 풀어야 한다."는 조건을 .. 2022. 2. 4. 이전 1 ··· 38 39 40 41 42 43 44 ··· 57 다음 반응형