알고리즘
-
[백준] 뱀 (3190번) Swift알고리즘 2021. 10. 9. 17:28
문제 내용 뱀이 1초에 한칸씩 이동을 하는데 벽이나 자신의 몸통에 부딪히면 게임이 종료된다. 뱀은 매 초마다 이동을 하는데 다음과 같은 규칙을 따른다. 먼저 뱀은 몸길이를 늘려 머리를 다음칸에 위치시킨다. 만약 이동한 칸에 사과가 있다면, 그 칸에 있던 사과가 없어지고 꼬리는 움직이지 않는다. 만약 이동한 칸에 사과가 없다면, 몸길이를 줄여서 꼬리가 위치한 칸을 비워준다. 즉, 몸길이는 변하지 않는다. 초기 뱀의 길이는 1이고, 오른쪽을 향한다. 전체 코드 // 1. n 값 let n = Int(readLine()!)! // 2. k 값 let k = Int(readLine()!)! // 3. 현재 전체 상태를 저장하기 위한 배열 (지도) var location: [[Int]] = Array(repeat..
-
[백준] 탈출 (3055번) Swift알고리즘 2021. 10. 7. 19:15
문제 내용 R x C 의 배열이 주어진다. "D" 는 도착 위치 (비버의 굴), "S" 는 시작 위치 (고슴도치 위치), "X" 는 이동 불가 (돌), "*" 는 물 위치, "." 은 빈 공간 이다. "S" 는 상하좌우 한칸씩 움직일 수 있고, 움직이고 나면 물이 상하좌우 한칸씩 움직인다. "S" 는 "." 만 이동할 수 있다. 만약 "S" 에서 "D" 까지 이동 가능하면 최소 시간을 출력하고, 이동 불가능하면 "KAKTUS" 를 출력해라. 전체 코드 // 1. R, C 불러옴 let size = readLine()!.split { $0 == " " }.map { Int(String($0))! } // 2. 위치를 저장할 location 배열 var location: [[Int]] = Array(repe..
-
[백준] 알고스팟 (1261번) Swift알고리즘 2021. 10. 7. 17:22
문제 내용 M x N 의 미로가 주어진다. 0은 벽이 없는 곳이고, 1은 벽이 있는 곳이다. 목적지 (M, N) 까지 가는데 최소한 벽을 몇 개 부수어야 하는지 구해라. 전체 코드 // 1. M x N 읽어옴 let size = readLine()!.split { $0 == " " }.map { Int(String($0))! } // 2. 미로 저장할 배열 var maze: [[Int]] = Array(repeating: [], count: size[1]) // 3. 해당 위치에 도착하는데 벽을 몇 개 부셨는지 저장하기 위한 배열 var weights: [[Int]] = Array(repeating: Array(repeating: size[0] + size[1] - 2, count: size[0]), c..
-
[백준] 이모티콘 (14226번) Swift알고리즘 2021. 10. 7. 14:34
문제 내용 이모티콘 S개를 만든다.처음에는 화면에 이모티콘 1개 존재한다.다음 3가지 연산으로 이모티콘 S 개를 만든다. 화면에 있는 이모티콘을 모두 복사하여 저장 복사되어있는 이모티콘을 붙여넣기 함 이모티콘 1개 삭제 모든 연산은 1초가 걸린다. 전체 코드 // 1. 목표 이모티콘 개수 받기 let s = Int(readLine()!)! // 2. queue 생성 // count = 현재 화면의 이모티콘 개수, time = 시간, copyCount = 현재 복사되어 있는 이모티콘 수 var queue: [(count: Int, time: Int, copyCount: Int)] = [] // 3. queue 를 가리킬 queueIndex 생성 var queueIndex = 0 // 4. 결과 저장 var..
-
[백준] 배열 돌리기 4 (17406번) Swift알고리즘 2021. 10. 7. 00:29
문제 내용 N X M 사이즈의 배열이 주어진다. 회전 연산 K 개가 주어지고 주어진 회전 연산으로 회전을 하여 행의 최솟값을 구해라 회전 연산은 모두 한 번씩 사용, 순서는 임의로 정해도 된다. (모든 경우의 수로 하라는 뜻) 제한사항 3 ≤ N, M ≤ 50 1 ≤ K ≤ 6 1 ≤ A[i][j] ≤ 100 1 ≤ s 1 ≤ r-s < r < r+s ≤ N 1 ≤ c-s < c < c+s ≤ M 전체 코드 // 1. size (N, M, K 입력 받기) let size = readLine()!.split { $0 == " " }.map { Int(String($0))! } // 2. 원본 배열 var originArr: [[Int]] = Array(repeating: [], count: size[0])..
-
[프로그래머스] 전력망을 둘로 나누기 (위클리 챌린지 9주차) Javascript알고리즘 2021. 10. 5. 12:49
문제 내용 하나의 트리 형태로 값이 주어진다. 이 중에서 하나의 연결된 edge 를 자르면 2개의 트리가 구성이 된다. 나눠진 2개의 트리의 각각 node 의 수가 있는데 그 수 끼리의 차를 구해라. 제한사항 n은 2 이상 100 이하인 자연수입니다. wires는 길이가 n-1인 정수형 2차원 배열입니다. wires의 각 원소는 [v1, v2] 2개의 자연수로 이루어져 있으며, 이는 전력망의 v1번 송전탑과 v2번 송전탑이 전선으로 연결되어 있다는 것을 의미합니다. 1 ≤ v1 < v2 ≤ n 입니다. 전력망 네트워크가 하나의 트리 형태가 아닌 경우는 입력으로 주어지지 않습니다. 전체 코드 function solution(n, wires) { // 1. 답을 저장할 answer 를 생성함 (정답은 최소값..
-
[프로그래머스] 숫자의 표현 Javascript알고리즘 2021. 10. 4. 17:57
문제 내용 자연수 n 을 연속한 자연수들의 합으로 표현해라. 예를 들어, n = 15 라고 했을 때 15 = 1 + 2 + 3 + 4 + 5 15 = 4 + 5 + 6 15 = 7 + 8 15 = 15 이렇게 나타낼 수 있다. 전체 코드 function solution(n) { // 1 let result = 0; // 2 let i = 1; // 3 let j = 0; // 4 for (; i = n * 2) { break; } } // 5 for (; i = n 이라 표현했지만 읽기 쉽게 양 쪽에 2를 곱하여서 i * (i + 1) >= n * 2 라고 표현했다. n 은 15 이므로 i * (i + 1) 이 15 * 2 이상 일 때 반복문이 종료된다. i = 5 일때 값이 30 이 되므로 종료된다. ..
-
[프로그래머스] 같은 숫자는 싫어 Javascript알고리즘 2021. 10. 4. 17:04
문제 내용 배열 arr 은 숫자 0 ~ 9 로 이루어져 있음.배열에서 연속적으로 나타나는 숫자는 하나만 남기고 모두 제거하고순서가 유지되어야 함. 예를 들어, arr return [3, 3, 3, 2, 2, 1] [3, 2, 1] 이렇게 순서도 유지되어야 함. 제한사항 배열 arr의 크기 : 1,000,000 이하의 자연수 배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수 전체 코드 function solution(arr) { // 1 let previousValue = arr[0]; // 2 let newArr = [previousValue]; // 3 for (let i = 1; i < arr.length; i++) { // 4 if (previousValue != arr[i..