→ Problems

· → Problems
문제 소개도넛 모양 그래프, 막대 모양 그래프, 8자 모양 그래프들이 있습니다. 이 그래프들은 1개 이상의 정점과, 정점들을 연결하는 단방향 간선으로 이루어져 있습니다. 크기가 n인 도넛 모양 그래프는 n개의 정점과 n개의 간선이 있습니다. 도넛 모양 그래프의 아무 한 정점에서 출발해 이용한 적 없는 간선을 계속 따라가면 나머지 n-1개의 정점들을 한 번씩 방문한 뒤 원래 출발했던 정점으로 돌아오게 됩니다. 도넛 모양 그래프의 형태는 다음과 같습니다.크기가 n인 막대 모양 그래프는 n개의 정점과 n-1개의 간선이 있습니다. 막대 모양 그래프는 임의의 한 정점에서 출발해 간선을 계속 따라가면 나머지 n-1개의 정점을 한 번씩 방문하게 되는 정점이 단 하나 존재합니다. 막대 모양 그래프의 형태는 다음과 같습..
· → Problems
문제소개문제 자체는 아주 간단하다. 문제 풀이Set으로 풀이우선 Set 자료구조를 사용하여 풀어봤지만 역시 M
· → Problems
문제 소개https://www.acmicpc.net/problem/14891 엄청난 구현문제... (?) 문제 풀이톱니바퀴 돌리기큐로 구현하는것이 일반적이지만 여기서는 배열의 갯수와 성분들이 작아서 간단하게 removeLast, removeFirst 메서드로 구현했다.func rotateGear(_ i: Int, _ isClockwise: Bool) { if isClockwise { gears[i].insert(gears[i].removeLast(), at: gears[i].startIndex) } else { gears[i].append(gears[i].removeFirst()) } } 같이 돌아가는 톱니바퀴 그룹화union, find 알고리즘을 사용했다. 결국 같은 그룹안에 있어야 톱니바퀴가 돌아가는..
· → Problems
문제 소개정말 정말 간단한 문제라서 10분도 안 걸릴 줄 알았지만 생각보다 시간을 쓴 문제... 너무 어려운 거에만 집중하지 말고 이런 단순한 문제에도 집중해야 한다는 것을 깨달았다. 문제 풀이정답 코드는 아래와 같이 단순하다.while let n = readLine(), let div = Int(n) { var num = 1, count = 1 while num % div != 0 { num = (num * 10 + 1) % div count += 1 } print(count) } 입력값여러개의 테스트 케이스로 이루어져 있기 때문에 while을 통해서 readLine()을 사용해 입력값을 계속 받도록 해야 했다.while let n = readLine(), let div = Int(n) { ... } ..
· → Problems
문제 소개주사위를 어떻게 굴릴것인지가 관건.문제 풀이이렇게 주사위가 동서남북으로 굴러간것을 표시하면 이렇게 된다. [위, 북, 동, 서, 남, 아래] 순으로 표시하면 위처럼 나타낼 수 있다. 나머지는 구현문제이다.import Foundation let nmxyk = readLine()!.components(separatedBy: " ").map { Int($0)! } let (n, m, x, y, k) = (nmxyk[0], nmxyk[1], nmxyk[2], nmxyk[3], nmxyk[4]) var map = Array(repeating: [Int](), count: n) for i in 0..
· → Problems
문제 소개 문제 풀이위상정렬을 활용하였다. Kahn 알고리즘과 DFS를 활용한 위상정렬이 있다.Kahn 알고리즘Kahn 알고리즘은 진입차수를 계산하면서 진입차수가 0인 것을 queue에 차례로 넣는다. 진입차수라고 하면 아래와 같이 들어오는 화살표의 갯수이다.DFS 알고리즘dfs 탐색을 거꾸로 하면 위상정렬이 된다. dfs 탐색을 하는데 dfs 를 한 뒤 마지막 정점을 stack에 저장해둔뒤 마지막 요소부터 꺼내면 그것이 위상정렬이 되는 것이다.여기서 6 5 3 4 2 1 을 거꾸로 한 1 2 4 3 5 6 이 위상정렬을 한 결과가 된다. 문제 풀이 코드Kahn 알고리즘 활용import Foundation let nm = readLine()!.split(separator: " ").map { Int($0..
· → Problems
문제 소개자연수 N 이 주어지면 N 보다 작은 연속된 소수의 합으로 나타낼 수 있는 경우의 수를 출력하는 문제. 문제 풀이소수는 에라토스테네스의 체를 통해서 구했고, 연속된 소수의 합은 투포인터 알고리즘을 사용하였다.import Foundation let n = Int(readLine()!)! // 입력값이 1일경우 빠른 처리 if n == 1 { print(0) exit(0) } // 에라토스테네스의 체 var isPrimeNumber = Array(repeating: true, count: n+1) var primeNumber = [Int]() let sqrtN = Int(sqrt(Double(n))) for i in 2..
· → Problems
문제 소개https://www.acmicpc.net/problem/1806문제 풀이투포인터 알고리즘을 활용하였다. 가장짧은 배열을 구하는 것이므로 최댓값은 최대로 나올 수 있는 값보다 1 높은 100,001 로 두고 투포인터를 활용해 조건을 만족하는 배열의 크기의 최솟값을 업데이트 했다.import Foundation let ns = readLine()!.split(separator: " ").map { Int($0)! } let (n, s) = (ns[0], ns[1]) var nums = readLine()!.split(separator: " ").map { Int($0)! } var (low, high) = (0, 0) var sum = nums[0] var ans = 100_001 while hi..
Swift librarian
'→ Problems' 카테고리의 글 목록 (3 Page)