BOJ 3190 뱀 swift
·
알고리즘
문제 링크 : https://www.acmicpc.net/problem/3190 문제 해설정말 단순하게 구현문제입니다. 다른 언어면 아마 Deque를 구현해서 사용했어야 문제를 풀 수 있을겁니다.뱀 문제를 풀 때 주의해야할 점은 뱀의 시작위치는 (1, 1)이라는 것입니다.일반 배열처럼 (0, 0)에서 시작하면 틀리기 때문에 주의하시길 바랍니다. 코드더보기import Foundationlet n = Int(readLine()!)!let k = Int(readLine()!)!var apples = [(Int, Int)]()for _ in 0..
BOJ 2449 전구 swift
·
알고리즘
문제 링크 : https://www.acmicpc.net/problem/2449 문제 해설N개의 전구가 일렬로 배치되어 있고, 각 전구는 1부터 K까지의 색으로 표현됩니다. 한 번에 연속된 같은 색의 전구 그룹을 선택해 다른 색으로 변경할 수 있을 때, 모든 전구를 같은 색으로 만드는 최소 변경 횟수를 구하는 문제입니다.연속된 같은 색 전구를 하나의 그룹으로 압축합니다.dp[i][j]를 i번째 그룹부터 j번째 그룹까지 같은 색으로 만드는 최소 횟수로 정의합니다.점화식 : dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j] + (colors[i] != colors[k + 1] ? 1 : 0) 코드더보기import Foundationlet input = readLine()..
BOJ 1799 비숍
·
알고리즘
문제 링크 : https://www.acmicpc.net/problem/1799 문제 해설체스판 위에 비숍을 겹치지 않게 놓는 문제입니다.마음같아선 브루트 포스로 전부 찾아보고 싶지만 시간초과가 나기 때문에 효율적인 방법을 찾아야합니다.먼저, 비숍을 놓을 수 있는 칸을 흑과 백으로 나눕니다.(비숍은 대각선으로만 움직이기 때문에 서로 다른 색의 칸에는 영향을 못 줍니다.)비숍을 놓을 수 있는 위치를 흑백으로 나눴다면 백트래킹을 통해 가능한 비숍의 최대 개수를 각각 구합니다.(대각선은 i + j와 i - j + (N - 1)음수방지 로 2차원 배열이 아닌 1차원 배열로 구현 가능합니다.) 코드더보기import Foundationif let n = Int(readLine()!) { var board = ..
BOJ 1865 웜홀 swift
·
알고리즘
문제 링크 : https://www.acmicpc.net/problem/1865 문제 해설해당 문제는 양방향 간선(도로)와 단방향 간선(웜홀)을 입력받아 음수 사이클이 발생하는 지에 대해 알아보는 문제입니다.양방향 간선(도로)와 단방향 간선(웜홀)을 입력받아 edges에 추가합니다.벨만-포드 알고리즘을 사용하기 위해 거리 배열을 초기화 시킵니다.(이때 거리는 무한입니다.)시작점에서 모든 간선을 N-1번 반복하여 최단거리를 갱신합니다.갱신이 완료되고, 한번 더 실행시켰을 때 갱신이 발생하면 음수 사이클이 존재하는 것입니다. 코드더보기import Foundationif let tc = Int(readLine()!) { for _ in 0.. distance[x] + dist { ..
BOJ 1918 후위 표기식 swift
·
알고리즘
문제 링크 : https://www.acmicpc.net/problem/1918 문제 해설중위 표기식을 후위 표기식으로 변경하는 문제입니다.중위 표기식을 후위 표기식으로 변경하는 절차를 조건문으로 작성하는 것이 정답입니다.피연산자는 바로 출력합니다.(코드에서는 String var에 추가하였습니다.)연산자는 스택에 push합니다.("+", "-", "*", "/" 등)여는 괄호는 무조건 push합니다. "("닫는 괄호가 나오면 여는 괄호를 만날 때까지 스택에서 pop합니다.(주의: "(" 여는 괄호도 제거해야 합니다.)수식이 끝나면 스택에 남은 연산자를 pop합니다. 코드더보기import Foundationlet input = readLine()!.map{ String($0) }var result = ..