분류 전체보기

· → Problems
문제 소개 문제 풀이초기 문제풀이 (시간초과)처음에는 모든 좌표에서 bfs를 통해 갈수있는 칸수를 계산했지만 역시나 시간초과가 났다.import Foundation let nm = readLine()!.split(separator: " ").map { Int($0)! } let (n, m) = (nm[0], nm[1]) let ds: [(i: Int, j: Int)] = [(1, 0), (-1, 0), (0, 1), (0, -1)] var map = [[Int]]() var answer = Array(repeating: Array(repeating: 0, count: m), count: n) for _ in 0.. Int { var queue: [(i: Int, j: Int)] = [(i, j)] var..
· → Problems
문제 소개간단한 bfs 문제이다. 문제 풀이visited 를 3차원 배열로 만들어서 풀었다 왜냐하면 벽을 부순후, 부수기 전의 visited 를 다르게 해줘야 하기 때문이다.import Foundation let nm = readLine()!.split(separator: " ").map { Int($0)! } let (n, m) = (nm[0], nm[1]) let ds: [(i: Int, j: Int)] = [(1, 0), (-1, 0), (0, 1), (0, -1)] var map = [[Int]]() var visited = Array(repeating: Array(repeating: Array(repeating: false, count: m), count: n), count: 2) for _ i..
· → Problems
문제 소개A, B, C 를 똑같이 만들어 주는 연산이다. 문제 풀이bfs로 풀었다. 어쨋든 똑같은 수로 만들면 되니까... 그리고 var visited = [String: Bool]() 로 visited 를 선언해줬다.import Foundation let abc = readLine()!.split(separator: " ").map { Int($0)! } let (a, b, c) = (abc[0], abc[1], abc[2]) func calc(_ num1: Int, _ num2: Int) -> (Int, Int) { if num1 < num2 { return (num1 + num1, num2 - num1) } else { return (num1 - num2, num2 + num2) } } var qu..
· → Problems
문제 소개https://www.acmicpc.net/problem/14502 연구소에 바이러스가 퍼지지 않게 하는 문제!문제 풀이벽은 dfs를 활용하여 모든 map의 경우를 만들어 준 후, bfs를 활용해서 바이러스를 전파(?)시켜서 최솟값을 구했다. 좀더 구현에 가까운 문제였던듯 싶다.import Foundation let nm = readLine()!.split(separator: " ").map { Int($0)! } let (n, m) = (nm[0], nm[1]) let ds = [(1, 0), (-1, 0), (0, 1), (0, -1)] var map = [[Int]]() var queue = [(Int, Int)]() for i in 0.. idx { let poped = queue[idx..
· → Problems
문제 소개문제 자체는 간단하다. DSLR 연산을 통해 a에서 b까지 최소한의 명령어 나열을 출력하는 문제이다. 문제 풀이이 문제는 푸는데는 시간이 많이 걸리지 않았지만 시간 초과로 애를 먹었다. 시간제한이 6초인데 겨우 5880ms 로 통과했다... 다시해봐도 5824ms 가 나오는 것을 봐서는 맞긴 맞은 모양이다... 정답 코드dslr 함수를 구현하고, bfs를 활용했다. L과 R연산을 문자배열을 만들어 하게되면 무조건 시간 초과가 나오게 되어서 연산으로만 구현해줘야 한다. 그리고 처음에는 queue 에 (num, command) 로 넣어주니 이것도 시간초과가 나왔다. 그래서 따로 commands 배열을 만들어 관리해주니 시간 단축이 되었다. queue도 removeFirst() 를 사용하지 않고 id..
· → Problems
문제 소개https://www.acmicpc.net/problem/16928 뱀과 사다리 게임을 하는데 주사위를 굴려야 하는 횟수의 최솟값을 구하는 문제이다. 문제 풀이DFS 를 활용한 풀이board, visited 를 통해 보드의 정보, 방문여부를 저장하여 구현했다. 처음에 틀렸는데 이유는 뱀을 타고 내려가는 경우는 일부로 고려하지 않았는데, 뱀을 타고 내려가는 경우에도 빨리 도착하는 경우가 있다.import Foundation let nm = readLine()!.split(separator: " ").map { Int($0)! } let (n, m) = (nm[0], nm[1]) var board = Array(repeating: 0, count: 101) var visited = Array(rep..
· → Problems
문제 소개알파벳을 가르칠 수 있고, 아래와 같이 주어질때 6개의 알파벳을 알려줘서 최대로 알수 있는 단어의 개수를 출력하는 문제이다.3 6 antarctica antahellotica antacartica // 2 문제 풀이비트마스크로 해결했다. dfs를 통해 bitmask를 만들고, k만큼 알려줬다면 countReadbleWords 함수를 통해 읽을 수 있는 단어 개수의 최댓값을 출력한다.import Foundation let nk = readLine()!.split(separator: " ").map { Int($0)! } let (n, k) = (nk[0], nk[1]) var words = [Int]() for _ in 0..
· → Problems
문제 소개문제 자체는 아주 간단했다. 아래의 입력값이 주어진다면 알파벳이 중복되지 않게 이동하는 최대 거리를 구하는 문제였다.2 4 CAAB ADCB // 정답 3 문제 풀이초기 문제풀이 (시간초과)우선 최대한 지날 수 있는 칸이기 때문에 dfs를 생각했고, 백트래킹을 통해 문제를 해결하면 된다고 생각했다. 그리고 알파벳을 어떻게 저장할까 고민했는데 Dictionary 나 Set 으로 저장하면 O(1) 으로 알파벳을 방문했는지 빠르게 알 수 있기 때문에 나는 이중에 Dictionary 를 활용했다,import Foundation let rc = readLine()!.split(separator: " ").map { Int($0)! } let (r, c) = (rc[0], rc[1]) let directi..
Swift librarian
'분류 전체보기' 카테고리의 글 목록 (7 Page)