개발/Swift
-
백준 1303 DFS 활용문제개발/Swift 2022. 4. 8. 19:25
WBWWW WWWWW BBBBB BBBWW WWWWW W와 붙어있는 W들의 총합 = 9 , 7 W 의 위력은 81 + 49 = 130 이다. 결국 붙어있는 W들의 총 합을 구한다면 되는 문제이다. 어떻게 구할수 있을까? DFS 를 통해 가능하다. 첫번째 (0,0) 에있는 W를 보자. 오른쪽엔 B 아래엔 W가있다. (위 왼쪽은 비어있으니 패스) 그럼 아래에 있는 W는 붙어있기 때문에 위력에 도움이될것이다. 이제 아래에있는 W 의 근처를 보고 또 W가있다면 또 그 W에 붙어있는 W가있다면 계속해서 합을 구해서 인접한 W의 갯수를 구하면 된다. 그렇게 위쪽에 있는 W무리를 구할수있다. 이게 지금 딱 한번 dfs를 돌린것이다. dfs는 0,0 부터 5,5까지 반복해야한다. 그러기위해서는 2차원배열을 반복해야하며..
-
백준 1260 DFS 와 BFS 구현하기개발/Swift 2022. 4. 8. 17:31
DFS 는 깊이 우선 탐색으로 1번노드가 시작점일시 1번의 자식들 그리고 그 자식들을 돌면서 깊게 먼저 탐색하는방식이다. 개인적으로 dfs 를 구현하기위해 재귀를 사용한다. 그리고 dfs 에는 필요한 요소들이있다 starting point : 몇번 노드를 탐색할지 array (graph) : 각 노드들의 자식 정보 visited array : 해당 노드를 이미 탐색했는지 정보 result : 계속 갱신될 결과값 visited array 와 result 는 mutating 이 필요하다. 따라서 dfs 재귀 함수에는 inout 을 넣어줘야 한다. func dfs(n:Int,arr : [[Int]],visited: inout [Int],dfsArr:inout [Int]){ if(visited[n-1] == 1..
-
[Swift] 오픈채팅방 프로그래머스개발/Swift 2022. 3. 27. 17:32
["Enter uid1234 Muzi", "Enter uid4567 Prodo","Leave uid1234","Enter uid1234 Prodo","Change uid4567 Ryan"] 문제 해결방법 들어오고 나가면 return 배열에 값을 추가하게되는데 이때 닉네임은 마지막에 유저가 설정한 닉네임을 써야한다. 그러므로 마지막 상태의 유저 닉네임을 알고있어야 한다. 관련 정보를 먼저 dict 에 넣어준다. //uid1234 prodo //uid4566 ryan 그리고 나중에 enter/leave 관련한 히스토리 를 보고 uid와 최종 닉네임을 참조해서 result 배열을 만들어 리턴하면 된다. func solution(_ record:[String]) -> [String] { var nicknameD..
-
[Swift] 문자열 압축개발/Swift 2022. 3. 26. 22:12
문제를 해결하기 위해 두가지 기능을 함수로 구현해야한다. 주어진 스트링을 원하는 길이만큼 잘라 배열로 만든다 배열을 압축된 스트링으로 만든다. 자를 길이는 1부터 주어진문자열의 반까지 가능하다. for sliceLength in 1...(s.count/2) {} 예로 길이가 6,7인경우 1,2,3 개씩 자를수있다. 8,9인경우는 1,2,3,4 개씩 자를수있다. 만약 s의 길이가 3보다 적은경우는 결국 s 의 길이와 같으므로 패스한다. ex>aa 의경우 2a ,aa 둘다 2의 길이 if(s.count Int { var answer = s.count if(s.count 2개씩 자를경우 aa / bb / ac / cc 하지만 만약 원하는 길이가 안나오는경우 3개씩 자르는데 aab / bac / cc 마지막 c..
-
[Swift] CountNonDivisible 코딜리티 코딩테스트개발/Swift 2022. 3. 5. 18:26
주어진 배열 값중 약수가 아닌 갯수를 세어 배열값으로 리턴해주는 문제이다. A[0] = 3 A[1] = 1 A[2] = 2 A[3] = 3 A[4] = 6 the function should return [2, 4, 3, 2, 0], as explained above. 3의 약수가 아닌 2,6 ← 두개이므로 2 1의 약수가 아닌 모든값 2의 약수가 아닌 3,3,6 ← 3개이므로 3 위 해답을 찾기위해 가장 단순한 방법은 반복문을 돌려 약수인지 아닌지 조건을 걸어 카운팅후 배열에 넣어 리턴하는 방법이다. public func solution(_ A : inout [Int]) -> [Int] { if(A.count == 1){return [0]} var arr = [Int]() var dict = [Int:..
-
[Swift] countFactors 약수구하기 코딜리티 코딩테스트개발/Swift 2022. 3. 5. 16:38
특정 수의 약수를 구하는 방법은 가장 쉬운 방법으로 1~ 반값 만큼 반복문을 돌린후 0으로 나누어 떨어지는값을 고르면 된다. public func solution(_ N : Int) -> Int { if(N == 1 ){return 1} var arr = [N] let center = N/2 for i in 1...center{ if(N%i == 0){ arr.append(i) } } return arr.count } 이 과정은 0(N)의 복잡도를 가지게된다. ( O(N/2) 이긴 하지만..) 이보다 빠른 방법은 O(sqrt(N))이 있다. 예를 들어 24 의 약수를 구해보자 1,2,3,4,6,8,12,24 이렇게 약수가 있다. 여기서 약수를 구할때는 0으로 나누어 떨어지는지에대한 조건으로 구하는건 같으..
-
[Swift] Dominator 코딜리티 코딩테스트개발/Swift 2022. 3. 4. 17:57
An array A consisting of N integers is given. The dominator of array A is the value that occurs in more than half of the elements of A. For example, consider array A such that A[0] = 3 A[1] = 4 A[2] = 3 A[3] = 2 A[4] = 3 A[5] = -1 A[6] = 3 A[7] = 3 The dominator of A is 3 because it occurs in 5 out of 8 elements of A (namely in those with indices 0, 2, 4, 6 and 7) and 5 is more than a half of 8...
-
[Swift] PassingCars 코딜리티 코딩테스트개발/Swift 2022. 3. 4. 13:12
A non-empty array A consisting of N integers is given. The consecutive elements of array A represent consecutive cars on a road. Array A contains only 0s and/or 1s: 0 represents a car traveling east, 1 represents a car traveling west. The goal is to count passing cars. We say that a pair of cars (P, Q), where 0 ≤ P < Q < N, is passing when P is traveling to the east and Q is traveling to the wes..