목록백준 (14)
HIT해

https://www.acmicpc.net/problem/2468 접근방식BFS로 해결했고 비의 높이를 0 부터 최대 높이 이전까지 반복문을 돌려 각 상황별 영역을 비교해서 답을 구했다. import Foundationfunc main() { // 배열 크기 let size = Int(readLine()!)! var arr : [[Int]] = [] var maxHeight = 0 var safeArea = 0 let dx = [0,0,-1,1] let dy = [1,-1,0,0] for i in 0.. rain && visited[i][j] == false{ findSafeArea(..
https://www.acmicpc.net/problem/2178 DFS를 사용하면 비용을 한번 더 사용하기에 오답이 나온다.그렇기에 BFS 를 사용하고 방문배열없이 구현해보았다. 그리고 그래프가 아닌 2차원 배열이기에 방향 배열을 만들어주었다. import Foundationfunc main() { let NM = readLine()!.split(separator: " ").map{ Int($0)! } let (X,Y) = (NM[0], NM[1]) var miro : [[Int]] = [] for _ in 0.. Int{ var queue : [[Int]] = [] queue.append([0,0]) ..

https://www.acmicpc.net/problem/2331 문제 접근값들을 배열에 저장하고 저장하는 순간 이미 배열에 들어있는 숫자라면 반복이 생겼다고 판단해내장함수 firstIndex(of)를 활용해 인덱스를 찾아서 출력하기로함. import Foundationfunc main() { let NM = readLine()!.split(separator: " ").map { Int($0)! } let (N,M) = (NM[0] , NM[1]) var result : [Int] = [] func repeatNum(_ num : String) { let xyz = num.map{ Int(String($0))! } var sum ..
https://www.acmicpc.net/problem/11652 11652번: 카드 준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다. 준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지 www.acmicpc.net 해시와 관련된 검색 문제다. 얼마나 빠르게 검색하느냐가 관건인데. 병합정렬을 통해 정렬 후 카운팅으로 정답을 알아가는 문제다. 문제 준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다. 준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지고 있는 정수를 구하는 프로그램을 작성하시오. 만약, 가장 많..

https://www.acmicpc.net/problem/17298 17298번: 오큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net 문제 크기가 N인 수열 A = A1, A2, ..., AN이 있다. 수열의 각 원소 Ai에 대해서 오큰수 NGE(i)를 구하려고 한다. Ai의 오큰수는 오른쪽에 있으면서 Ai보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미한다. 그러한 수가 없는 경우에 오큰수는 -1이다. 예를 들어, A = [3, 5, 2, 7]인 경우 NGE(1) = 5, NGE(2) = 7, NGE(3) = 7, NGE(4) = -1이다..
https://www.acmicpc.net/problem/1654 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net const filePath = process.platform === 'linux' ? '/dev/stdin' : 'input.txt'; let [N,...input] = require("fs") .readFileSync(filePath) .toString() .trim().split('\n'); N = N.split(' ')[1]; // 원하는 랜선 갯수 input =..
https://www.acmicpc.net/problem/2630 2630번: 색종이 만들기 첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다. www.acmicpc.net 바로 이전에 풀었던 종이의 개수와 완전 똑같은 문제다. 하지만 문법 및 분할정복 개념 숙련도를 높이기 위해 클론코딩없이 만들어 보았다. 하지만 또 틀린 부분이 있었는데 바로 이부분이다. paper = paper.map(r => r.replace('\r','').split(' ')); 정리를 하자 map은 배열안의 배열을 괄호 안의 규칙으로 만들 떄 사용한다. 위의 경우 ..

https://www.acmicpc.net/problem/1780 1780번: 종이의 개수 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수 www.acmicpc.net 기본적인 분할 정복 문제다. 처음에 모든 종이내부의 숫자가 일치하지 않으면 9등분으로 나누고 나눈 것에서도 전부 일치하지않으면 9등분을 해서 정답을 찾아나가는 방식이다. 처음 시간 초과가 발생한 이유는 Flag배열을 사용해 검색했는지 안했는지 체크를 하고 다음 부분을 검색해 나가려했는데. 이분 탐색문제는 index와 재귀를 활용해 풀어야 시간초과가 나지 않고 제대로 풀 수 있었다. 그리..