문제 정보 문제 출처: 백준 온라인 저지 문제 링크: 16953 A -> B 제출 언어: Swift 알고리즘 분류: 그래프 이론 그리디 알고리즘 그래프 탐색 너비 우선 탐색 풀이 숫자 A에서 B로 만드려면 2를 곱하기와 맨 뒷 자리에 1 붙이기를 반복해야 한다. 만약 예를 들어 2부터 시작한다면, 4와 21로 만들 수 있고, 또 4로는 8과 41, 21로는 42와 211을 만들 수 있다. 하나의 숫자로 두 개의 수를 만들 수 있으므로 다음과 같은 피라미드 형태의 수열이 생긴다. 우리가 구하려는 것은 필요한 연산의 최솟값이므로 BFS로 Depth별로 탐색하여, B의 숫자에 도달하면 해당 Depth를 반환하고, 도달하지 못하는 경우 -1을 반환하는 알고리즘을 작성하였다 BFS 적용 먼저 처음 숫자인 A를 q..
문제 정보 문제 출처: 백준 온라인 저지 문제 링크: 2606 바이러스 제출 언어: Swift 알고리즘 분류: 그래프 이론 그래프 탐색 너비 우선 탐색 풀이 해당 문제는 그래프에서 쌍방향으로 연결되어 있는 노드의 개수를 카운트하는 것으로 이해하였다 나는 이 문제를 BFS(Breadth-First-Search)를 이용하여 풀이하였다 DFS로도 풀 수 있는 문제였지만 점진적으로 퍼져가는 바이러스를 시각적으로 표현하기에는 BFS가 적당할 것 같았다 for i in 0.. count = 0분명히 컴퓨터들은 쌍방향 연결이지만, 내가 직전에 짠 코드는 앞에 써져 있는 숫자의 컴퓨터가 뒤에 써져 있는 숫자의 컴퓨터로 바이러스가 퍼지는 경우만 고려하였다 그러므로 다음과 같이 코드를 변경해주었다 단순히 반대방향으로의 경..
문제 정보 문제 출처 코딩테스트 연습 | 프로그래머스 스쿨 개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요! school.programmers.co.kr 문제 링크 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 제출 언어: Swift 알고리즘 분류: 그리디 문제 설명 당신은 일렬로 나열된 n개의 집에 택배를 배달하려 합니다. 배달할 물건은 모두 크기가 같은 재활용 택배 상자에 담아 배달하며, 배달을 다니면서 빈 재활용 택배 상자들을 수거하려 합..
문제 정보 문제 출처: 백준 온라인 저지 문제 링크: 1303 전쟁 - 전투 제출 언어: Swift 알고리즘 분류: 그래프 이론 그래프 탐색 너비 우선 탐색 깊이 우선 탐색 풀이 기본 BFS, DFS문제에 마지막 병사의 수를 제곱해서 더해주는 부분만 처리해주면 되는 문제였다 나는 visited 2차원 배열로 방문 여부를 파악하고 arr에 전쟁터에 있는 병사의 팀 상태를 입력해준다 func countSoldier(_ team: Character, _ x: Int, _ y: Int, _ count: inout Int) -> Int { visited[x][y] = true guard arr[x][y] == team else {return count} for i in 0...3 { if arr[x+dx[i]][..
문제 정보 문제 출처: 백준 온라인 저지 문제 링크: 1038 감소하는 수 제출 언어: Swift 알고리즘 분류: 브루트포스 알고리즘 백트래킹 풀이 이 문제를 한참 읽어도 이해가 가지 않았는데 이해한 바로는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 21, 30, 31.. 등 처럼 자리수가 작아질 때마다 수도 감소하는 수를 감소하는 수라고 한다 즉 10은 10번째 감소하는 수이고, 20은 11번째 감소하는 수이다 알고리즘 설계 일의 자리 숫자중 감소하는 수는 0 9이고 십의 자리 숫자중 감소하는 수는 10, 20, 21, 30, 31, 32, 40 ..이다 백의 자리 숫자중 감소하는 수는 210, 310, 320, 321등이다 내가 생각한 알고리즘은 이중 배열 arr를 만들어서 ..
문제 정보 문제 출처: 백준 온라인 저지 문제 링크: 2667 단지번호붙이기 제출 언어: Swift 알고리즘 분류: 그래프 이론 그래프 탐색 너비 우선 탐색 깊이 우선 탐색 풀이 그래프 이론 그래프는 정점과 그 정점들을 연결하는 간선으로 이루어진 자료구조의 일종이다 그래프 탐색 : 하나의 정점으로부터 시작하여 차례대로 조건에 맞는 모든 정점들을 한 번씩 방문한다 DFS(Depth-First-Search) 깊이 우선 탐색 BFS(Breath-First-Search) 너비 우선 탐색 방향이 있을수도, 없을수도 있다 ex) 지하철 노선의 최단 경로 및 선수 과목 등 DFS 최대한 깊이 탐색한 후, 더 이상 깊이 갈 곳이 없을 경우, 옆으로 이동한다 루트 노드에서 시작해서 다음 분기로 넘어가기 전에 해당 분기를..
문제 정보 문제 출처: 백준 온라인 저지 문제 링크: 2294 동전 2 제출 언어: Swift 알고리즘 분류: 다이나믹 프로그래밍 풀이 다이나믹 프로그래밍 전체 문제의 최적해가 부분 문제의 최적해로부터 만들어지는 알고리즘이다 하나의 문제를 단 한 번의 연산으로 해결하기 위해, 즉 전체 문제를 풀 때, 동일한 계산을 반복하지 않기 위해 Table에 부분문제의 solution을 저장한다 항상 최적의 해를 보장하지만 Table에 부분문제의 solution을 저장하므로 많은 메모리를 차지한다 알고리즘 설계 해당 문제의 예시로 dp 배열을 생성해보면 다음과 같다. dp[0] = 0 dp[1] = 1 (1) dp[2] = 2 (1+1) dp[3] = 3 (1+1+1) dp[4] = 4 (1+1+1+1) dp[5] ..
문제 정보 문제 출처: 백준 온라인 저지 문제 링크: 2630 색종이 만들기 제출 언어: Swift 알고리즘 분류: 분할정복 재귀 풀이 우선 2차원 배열을 생성하여 입력 값을 넣어준 후에, 다양한 경우의 수로 나누어서 처리를 해주었다 . 분할정복이므로 자를 색종이의 배열과, 현재 배열의 크기를 인자로 받는 재귀함수로 구현하였고, 종료조건을 해당 배열의 크기가 1일 때, 해당 색종이의 색에 따라 count에 1을 더해주고 해당 재귀를 종료하도록 하였다. 이 문제에서 중요한 것은 색종이 한 칸의 개수를 세는 것이 아니고 잘라진 색종이의 개수를 세므로 1씩만 더해주면 된다. func cutConfetti(_ tempArr: [[Int]], _ size: Int) { // 더 이상 자를 색종이가 없는 경우 if..