본문 바로가기

Algorithm39

[Algorithm/Programmers] 스킬트리 Level 2 스킬트리 문제 풀이: 1. 나열된 스킬중에서 스킬트리에 있는 문자열만 추출하여 저장한다. 2. 추출한 문자열과 스킬트리의 문자열을 길이만큼 비교한다. 3. 같은 개수를 구해서 리턴한다. 코드: import Foundation func solution(_ skill:String, _ skill_trees:[String]) -> Int { var result = 0 for skills in skill_trees { let lst = skills.filter { skill.contains($0) } let check = skill.prefix(lst.count) result += lst == check ? 1 : 0 } return result } 문제: programmers.co.kr/lear.. 2021. 1. 14.
[Algorithm/Programmers] 가장 큰 수 문제 풀이: 1. String으로 숫자를 합치고 Int로 변환하여 정렬한다. 2. 수가 모두 0일 때는 0으로 출력한다. 3. 정렬된 배열을 String으로 합쳐서 출력한다. 코드: import Foundation var numbers = [6, 10, 2] //var numbers = [3, 30, 34, 5, 9] func solution(_ numbers:[Int]) -> String { let sortedNums = numbers.sorted() { Int("\($0)\($1)")! > Int("\($1)\($0)")!} if sortedNums[0] == 0 { return "0" } return sortedNums.reduce("") {$0 + String($1)} } print(solutio.. 2020. 12. 18.
[Algorithm/BOJ] 1931 - 회의실 배정 (Greedy) Swift 문제 풀이: 1. 시작하는 시간을 기준으로 오름차순 정렬 2. 끝나는 시간을 기준으로 오름차순 정렬 3. 끝나는 시간과 다음 시작 시간과 비교해서 작다면 카운트 증가 4. 회의 배열 끝까지 위 3번 반복 코드: import Foundation let n = Int(readLine()!)! var session = [(Int,Int)]() for _ in 0 ..< n { let s = readLine()!.split(separator: " ").map {Int(String($0))!} session.append((s[0],s[1])) } session.sort (by: { $0.0 < $1.0 }) session.sort(by: { $0.1 < $1.1 }) var temp = 0 var result =.. 2020. 12. 17.
[Algorithm/BOJ] 1541 - 잃어버린 괄호 (Greedy) Swift 문제 풀이: 1. 입력을 "-" 기준으로 분할한다. 2. "-" 이전은 무조건 + 이기 때문에 값들을 result에 더해준다. 3. "-" 이후의 값들을 분리해서 temp에 더해준다. 4. result-temp 출력하면 최솟값이 나온다. 코드: import Foundation var formula = readLine()!.split(separator: "-").map {String($0)} let first = formula[0].split(separator: "+").map {Int(String($0))!} var result = 0 for i in first { result += i } var temp = 0 for i in 1 ..< formula.count { let minus = formula[.. 2020. 12. 17.
[Algorithm/Programmers] 여행 경로(DFS/BFS) 제한 사항: 1. 만일 가능한 경로가 2개 이상일 경우 알파벳 순서가 앞서는 경로를 return 합니다. -> 목적지의 알파벳 순으로 정렬한다. 2. 모든 도시를 방문할 수 없는 경우는 주어지지 않습니다. -> 모든 경로를 지나가지만 모든 경로가 이어져 있는 것은 아니다. 3. 주어진 항공권은 모두 사용해야 합니다. 4. 항상 ICN에서 출발한다. 코드: import Foundation func solution(_ tickets:[[String]]) -> [String] { var visited = Array(repeating: false, count: tickets.count) var start = "ICN" let sortedTickets = tickets.sorted(by: { $0[1] < $1[.. 2020. 12. 12.
[Algorithm/BOJ] 18405 - 경쟁적 전염 (BFS) Swift 문제 풀이: 1. 작은 번호부터 상, 하, 좌, 우 순서대로 바이러스 퍼트리기 1-1. 0이 아닌 바이러스가 퍼져 있다면 패스 2. 정해진 시간 후에는 원하는 칸의 바이러스 출력 2-1. 해당 위치의 바이러스가 없다면 0 출력 코드: import Foundation struct Object: Comparable { let num: Int let x: Int let y: Int let time: Int // 바이러스 번호 순서대로 정렬하기 위함 static func Bool { return lhs.num < rhs.num } } let nk = readLine()!.split(separator: " ").map {Int(String($0))!} le.. 2020. 12. 6.
[Algorithm] DFS/BFS Graph 그래프는 2가지 방식으로 표현할 수 있다. 1. 인접 행렬(Adjacency Matrix) : 2차원 배열로 그래프의 연결 관계를 표현하는 방식 2. 인접 리스트(Adjacency List) : 리스트로 그래프의 연결 관계를 표현하는 방식 DFS (Depth-First-Search) - 깊이 우선 탐색 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘이다. 스택 자료구조를 이용하여 구현한다. 1. 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다. 2. 스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면 그 인접 노드를 스택에 넣고 방문 처리를 한다. 2-1. 방문하지 않은 인접노드가 없다면 스택에서 최상단 노드를 꺼낸다. 3. 2번의 과정을 더 이상 수행할 수 없을 때까지 반복한다. .. 2020. 12. 1.
[Algorithm/Programmers] 기능 개발 (스택/큐) Swift 문제 풀이: 1. 각 기능 별로 완성되는 기간 확인 2. 첫 기능의 완성 기간을 기준으로 그 다음 기능의 기간과 비교하여 작다면 같이 pop 3. 다음 기능의 완성 기간이 더 클 때까지 2번 반복 4. 모든 기능이 끝나지 않았다면 2번으로 돌아가서 반복 import Foundation //테스트 케이스 //var progresses = [93, 30, 55] //var speeds = [1, 30, 5] //var progresses = [95, 90, 99, 99, 80, 99] //var speeds = [1,1,1,1,1,1] func solution(_ progresses:[Int], _ speeds:[Int]) -> [Int] { let len = progresses.count var resul.. 2020. 11. 22.
[Swift] PS 시간 측정하기 swift언어로 문제를 풀다 보면 시간 초과가 뜨는 경우가 있어 시간 측정하는 방법을 기록합니다.. CFAbsoluteTimeGetCurrent()를 이용 import Foundation processTime{ // Code } func processTime(closure: () -> ()){ let start = CFAbsoluteTimeGetCurrent() closure() let processTime = CFAbsoluteTimeGetCurrent() - start print("경과 시간: \(processTime)") } 출처 https://www.hackingwithswift.com/example-code/system/measuring-execution-speed-using-cfabsolute.. 2020. 11. 20.