Swift
-
[Programmers] 스티커 모으기(2)Algorithm/Programmers 2021. 10. 24. 14:45
출처: https://programmers.co.kr/learn/courses/30/lessons/12971 분류: dp 접근 배열의 길이도 100,000 으로 크고 이 스티커를 뗄지 안 뗄지, 앞에껄 땠는지 안 땠는지 등등의 경우를 고려해줘야 하니 DP로 문제로 접근을 했어요. 그냥 배열의 첫 번째를 기준으로 잡으면, 이 스티커를 땔 경우 DP vs 떼지 않을 경우 DP 두 번의 DP를 구해서 최대를 구하면 되는 문제였네요 처음에 저도 이렇게 접근은 했는데 첫 번째 인덱스부터 DP, 마지막 인덱스부터 거꾸로 DP 라는 엉뚱한 풀이로 해서.. 꽤나 삽질을 했습니다 😰 풀이 일단 각 케이스의 0, 1번 기저 사례를 구해주고 2번 인덱스부터 점화식으로 적용해주면 됩니다. (사실 n이 3일 때는 하나밖에 땔 ..
-
Playground using Algorithms PakageiOS 2021. 10. 24. 14:42
오늘은 플레이그라운드에서 원하는 pakage를 import 해서 쓸 수 있는 방법을 알아보도록 하겠습니다! 이번에 새로 나온 내장 메소드들이 너무 좋아서 사용해보려고 했는데 이걸 위해선 import Algorithms 가 필요한데요! 플레이 그라운드에서 이게 안되는거죠.... 오늘은 이걸 해볼거에요! 먼저 Playground 자체만 가지고는 패키지를 추가할 수가 없습니다 ㅠㅠ 전체적인 방법을 먼저 간략히 소개해드리면 workspace 생성 -> 여기에 포함되는 playground 생성 -> swift-algorithms 패키지 추가 이게 끝입니다. 간단하죠! 바로 해볼게요! workspace 생성 xcode를 켜서 workspace 만들어줍니다! playground 생성 이제 여기서 플레이그라운드를 생성..
-
RIBs) tutorial2-2iOS 2021. 6. 26. 14:12
uber 공식 튜토리얼을 따라가면서 제 나름대로 정리한 내용입니다. 보다 정확한 내용은 원문을 참고해주시고 오류나 수정사항이 있으면 알려주시면 감사하겠습니다. 🙇🏻♂️ 전체 코드를 보시려면 여기로 ;) ⚠️ 우버 튜토리얼의 순서를 그대로 따라가지 않습니다. 이전 튜토리얼에서 부터 만들어나갑니다. TicTacToe 이제 진짜 게임을 시작할 차례입니다. 앞선 LoggedOut → LoggedIn 과 비슷합니다. 이번엔 OffGame → TicTacToe로 OffGame 에서 Start Game 버튼이 눌리면 TicTacToe RIB으로 이동시켜줍니다. 똑~~같습니다. 먼저 TicTacToe RIB을 만들어줍니다. 당연히 뷰가 있는 RIB 이겠죠? 원래 튜토리얼에는 틱택토 게임이 구현된 TicTacToe R..
-
RIBs) tutorial2iOS 2021. 6. 26. 00:13
uber 공식 튜토리얼을 따라가면서 제 나름대로 정리한 내용입니다. 보다 정확한 내용은 원문을 참고해주시고 오류나 수정사항이 있으면 알려주시면 감사하겠습니다. 🙇🏻♂️ 전체 코드를 보시려면 여기로 ;) ⚠️ 우버 튜토리얼의 순서를 그대로 따라가지 않습니다. 이전 튜토리얼에서 부터 만들어나갑니다. 목표 자식 RIB과 부모 RIB 통신 부모 interactor에서 자식 RIB attaching/dettaching View-less RIB 생성 view-less RIB이 dettaching될 때 cleaning up view 정리 부모 RIB이 처음 로드될 때 자식 RIB attaching RIB 라이프사이클 이해하기 RIB Unit testing 프로젝트 구조 그림과 같은 RIB tree를 구성하려고 합니..
-
백준 1261 알고스팟Algorithm/BOJ 2021. 6. 14. 15:41
출처: https://www.acmicpc.net/problem/1261 분류: BFS, 다익스트라 접근방식 0은 그냥 통과, 1이 있는 칸은 벽을 부수면서 목적지까지 갈 때 최소한 몇 개의 벽을 부숴야하는지 찾는 문제였습니다. dist 배열을 두고 최소 비용을 갱신해주면서 BFS 탐색을 해주는 방식으로 해결했습니다. 해결방법 let mn = readLine()!.split(separator: " ").map { Int(String($0))! } let (m, n) = (mn[0], mn[1]) let delta = [(1, 0), (-1, 0), (0, 1), (0, -1)] var map = [[Int]]() for _ in 0..= 0, nr = 0, nc < m else { con..
-
백준 1941 소문난 칠공주Algorithm/BOJ 2021. 6. 6. 16:50
출처: https://www.acmicpc.net/problem/1941 분류: brute force 접근방식 처음엔 그냥 bfs, dfs로 풀 수 있겠거니 했으나.... 점점 어라? 어라..? 어라....????!! 하며 쉽지 않았던 문제였습니다. 중복을 어떻게 줄여줘야할지 도통 감이 오질 않더라구요.. 결국은 다음와 같은 과정으로 해결했습니다. 1. 각 칸을 0~24로 두고, 0~24 중 7개를 선택하는 조합을 구한다. (약 48만개) 2. 조합에서 S가 4명 이상인지 확인한다 3. 조합이 모두 인접해있는지 확인한다. 1, 2번까지는 어렵지 않게 구할 수 있을 거 같은데 3번이 살짝 까다롭네요. 3번은 만든 조합의 0번부터 시작해 인접한 수가 조합안에 있는지 확인하고 queue에 담아주면서 탐색하는 ..
-
백준 2668 숫자고르기Algorithm/BOJ 2021. 6. 4. 23:05
출처: https://www.acmicpc.net/problem/2668 분류: 그래프, dfs 접근방식 1~n 까지에 각각 숫자가 매겨져 있을 때, 매겨진 숫자와 자신의 숫자의 집합이 같아지도록 최대한 많이 뽑아내는 문제입니다. 1~n을 노드 자신의 인덱스로, 매겨진 숫자를 다음 노드를 가리키는 그래프로 생각해보면, 결국 자기 자신으로 돌아오는 사이클이 아니면 절대 같은 집합이 될 수 없다는 걸 알 수 있습니다. 이렇게 각 사이클들을 더해주면 끝입니다 :) 전체 defaultVisit과 방문하면서 체크할 visit 배열을 만들어두고 탐색해서 사이클이 생겼다면 해당 visit을 defaultVisit으로 업데이트 시켜주는 방식으로 구현했습니다. for i in 0.. 0 { defaultVisit = v..
-
백준 13335 트럭Algorithm/BOJ 2021. 6. 4. 15:29
출처: https://www.acmicpc.net/problem/13335 분류: 구현, 시뮬레이션 접근방식 어떻게 하면 똑똑하게 풀 수 있을지 고민이 되었던 문제네요.. 결국 시간을 1초씩 늘리면서 매 시간 진입, 나갈 수 있는 트럭을 체크해주면서 해결했습니다. 매 시간 늘리지 않고 의미있는 시간 단위로 체크하면서 처리하고 싶었는데... 잘 모르겠네요 😢 말씀드렸다시피 매 시간 체크를 해주기 위해 현재 시간, 다음 진입해야 할 트럭, 현재 다리 위에 달리고 있는 트럭, 다리의 무게, 각 트럭의 끝나는 시간을 기록한 배열 등을 정의했습니다. 풀이는 간단합니다. 더이상 기다리고 있는 트럭이 없을 때까지 반복하는데요, 현재 시간에 끝나는 트럭이 있는지 먼저 확인해서 빼주고 다음 트럭이 진입할 수 있는지 체크..