이전 게시글에서 다이나믹 프로그래밍을 맛볼 수 있었는데, 한 발짝 더 나아가서 효율적으로 풀 수 있는 방법을 고민하는 문제가 여기 있다. 이전 게시글 보러가기 ⬇️ 2023.07.18 - [공부하자!/알고리즘] - 백준 | 9095 1, 2, 3 더하기 Swift - DP 우선, 점화식을 구해보자! 문제에서 P(1)부터 P(10)까지 제공해주었다 1 2 3 4 5 6 7 8 9 10 1 1 1 2 2 3 4 5 7 9 그림에서 보면 알 수 있듯이, 11번째 삼각형의 한 변의 길이는 9+3, 즉 P(10)+P(6)인 12이다. 10번째 삼각형의 한 변의 길이는 P(9)+P(5)인 9이다. 즉 점화식을 구하면 다음과 같다 P(n) = P(n-1) + P(n-5) 하지만 이걸 그대로 코드로 구현하면 시간 초과..
중앙에서 시작해서 달팽이가 가는 그대로 따라가면서 숫자를 할당해주면 된다! 채점 중 50%대 쯤에 틀렸다고 나왔는데, 찾고자 하는 자연수가 1일 때를 생각 안해서 틀렸다. 스스로 반례 찾는 연습도 해야할 듯!! // // main.swift // CodingTestPractice // // Created by CHOI on 2023/05/23. // // 달팽이 import Foundation let n = Int(readLine()!)! // 홀수인 자연수 N let target = Int(readLine()!)! // 찾고자 하는 N^2 이하의 자연수 var arr = Array(repeating: Array(repeating: 0, count: n), count: n) func solution() ..
주식 매도/매수 방법이 다른 준현이와 성민이. 1/1~1/14 기간 동안 각자의 방법으로 자산을 불린 후 둘 중 누가 더 자산이 많은지 결과를 출력하는 문제. 1/1~1/14 배열을 돌면서 각자의 자산을 체크한다 준현이: 현재가가 현금보다 낮으면 전부 매수 성민이: 3일 연속 상승 & 보유 주식이 있다면 전량 매도 / 3일 연속 하락 & 현재가가 현금보다 낮으면 전량 매수 자산 계산: 현금 + 주가 * 주식 수 // // 20546.swift // CodingTestPractice // // Created by CHOI on 2023/05/21. // // 기적의 매매법 import Foundation let cash = Int(readLine()!)! let MachineDuck = readLine()..
#1 런타임에러 import Foundation let t = Int(readLine()!)! for _ in 0...t { let n = Int(readLine()!)! let nums = readLine()!.split(separator: " ").map{Int($0)!} print(solution(n: n, nums: nums)) } func solution(n: Int, nums: [Int]) -> String { let temp = nums.sorted() return "\\(temp[0]) \\(temp[n - 1])" } t - 1을 안해줘서 한 줄을 더 받고 있었다.. 하지만 고쳤는데 시간 초과 ㅠ 역시 sorted는 안되려나 #2 시간초과 import Foundation let t = I..
문제 4963번: 섬의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도 www.acmicpc.net from collections import deque import sys dr = [-1, 1, 0, 0, -1, 1, -1, 1] dc = [0, 0, -1, 1, -1, 1, 1, -1] def bfs(x, y): queue.append((x, y)) m[x][y] = cnt while queue: x, y = queue.popleft() for i in range(8): nx = x + dr[i] ny = y + dc[i] if 0
문제 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net from collections import deque import sys m, n = map(int, sys.stdin.readline().split()) t = [[0] * m for i in range(n)] queue = deque() dr = [-1, 1, 0, 0] dc = [0, 0, -1, 1] for i in range(n): line = list(map(int, sys.stdin.readline().split())) for ..