반응형

알고리즘/문제풀이 34

백준 1806: 부분합

문제 10,000 이하의 자연수로 이루어진 길이 N짜리 수열이 주어진다. 이 수열에서 연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중, 가장 짧은 것의 길이를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다. 출력 첫째 줄에 구하고자 하는 최소의 길이를 출력한다. 만일 그러한 합을 만드는 것이 불가능하다면 0을 출력하면 된다. 1. 문제 해석 1.1. 투 포인터 알고리즘 포인터 2개(low, high) 를 이용해서 원하는 구간을 설정하면서 이동한다. - 정렬된 데이터 집합에서 합집합, 교집합 구하기..

백준 1181번 - 단어 정렬 , c++ sort함수

문제 알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오. 길이가 짧은 것부터 길이가 같으면 사전 순으로 입력 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. 출력 조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다. 1. 문제 해석 c++문법으로 쓰느라 학습하는 느낌이다. 원래 C로 작성했을 때 계속 오류가 났는데 아쉽게도 이유는 모른다. - 문자열 전역변수 char string[20000][51]; 로 설정하면서 - 두 문자열의 위치를 바꿀 때..

백준 2805번: 나무자르기 - 이분탐색

문제 상근이는 나무 M미터가 필요하다. 근처에 나무를 구입할 곳이 모두 망해버렸기 때문에, 정부에 벌목 허가를 요청했다. 정부는 상근이네 집 근처의 나무 한 줄에 대한 벌목 허가를 내주었고, 상근이는 새로 구입한 목재절단기를 이용해서 나무를 구할것이다. 목재절단기는 다음과 같이 동작한다. 먼저, 상근이는 절단기에 높이 H를 지정해야 한다. 높이를 지정하면 톱날이 땅으로부터 H미터 위로 올라간다. 그 다음, 한 줄에 연속해있는 나무를 모두 절단해버린다. 따라서, 높이가 H보다 큰 나무는 H 위의 부분이 잘릴 것이고, 낮은 나무는 잘리지 않을 것이다. 예를 들어, 한 줄에 연속해있는 나무의 높이가 20, 15, 10, 17이라고 하자. 상근이가 높이를 15로 지정했다면, 나무를 자른 뒤의 높이는 15, 15..

백준 2206: 벽 부수고 이동하기 (그래프 순회, 탐색)

문제 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로로 이동하려 한다. 최단경로는 맵에서 가장 적은 개수의 칸을 지나는 경로를 말하는데, 이때 시작하는 칸과 끝나는 칸도 포함해서 센다. 만약에 이동하는 도중에 한 개의 벽을 부수고 이동하는 것이 좀 더 경로가 짧아진다면, 벽을 한 개 까지 부수고 이동하여도 된다. 한 칸에서 이동할 수 있는 칸은 상하좌우로 인접한 칸이다. 맵이 주어졌을 때, 최단 경로를 구해 내는 프로그램을 작성하시오. 입력 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 1,000)이 주어진다. 다음 N개의 줄에 ..

백준 1753번: 최단경로 ( 최단경로, 다익스트라)

문제 방향그래프가 주어지면 주어진 시작점에서 다른 모든 정점으로의 최단 경로를 구하는 프로그램을 작성하시오. 단, 모든 간선의 가중치는 10 이하의 자연수이다. 입력 첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1 ≤ V ≤ 20,000, 1 ≤ E ≤ 300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정점의 번호 K(1 ≤ K ≤ V)가 주어진다. 셋째 줄부터 E개의 줄에 걸쳐 각 간선을 나타내는 세 개의 정수 (u, v, w)가 순서대로 주어진다. 이는 u에서 v로 가는 가중치 w인 간선이 존재한다는 뜻이다. u와 v는 서로 다르며 w는 10 이하의 자연수이다. 서로 다른 두 정점 사이에 여러 개의 간선이 존재할 수도 있음에 유의한다. 출력 ..

백준 16928번 :뱀과 사다리 게임 (그래프 순회 및 탐색)

문제 뱀과 사다리 게임을 즐겨 하는 큐브러버는 어느 날 궁금한 점이 생겼다. 주사위를 조작해 내가 원하는 수가 나오게 만들 수 있다면, 최소 몇 번만에 도착점에 도착할 수 있을까? 게임은 정육면체 주사위를 사용하며, 주사위의 각 면에는 1부터 6까지 수가 하나씩 적혀있다. 게임은 크기가 10×10이고, 총 100개의 칸으로 나누어져 있는 보드판에서 진행된다. 보드판에는 1부터 100까지 수가 하나씩 순서대로 적혀져 있다. 플레이어는 주사위를 굴려 나온 수만큼 이동해야 한다. 예를 들어, 플레이어가 i번 칸에 있고, 주사위를 굴려 나온 수가 4라면, i+4번 칸으로 이동해야 한다. 만약 주사위를 굴린 결과가 100번 칸을 넘어간다면 이동할 수 없다. 도착한 칸이 사다리면, 사다리를 타고 위로 올라간다. 뱀..

백준 1912- 연속합(다이나믹 프로그래밍)

문제 n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 수는 한 개 이상 선택해야 한다. 예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12+21인 33이 정답이 된다. 입력 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. 출력 첫째 줄에 답을 출력한다. ------------------------------------------------------------------------------..

백준 1697 - 숨바꼭질 (그래프 순회, 탐색 , 최단경로와 BFS)

문제 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다. 수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오. 입력 첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다. 출력 수빈이가 동생을 찾는 가장 빠른 시간을 출력한다. 1. 문제 해석 수빈이가 동생의 위치에 도달할 때까지 최소한으로 이동..

백준 2667 - 단지번호 붙이기 (그래프 탐색, 순회)

1. 배경지식 BFS 와 DFS - DFS는 깊이 우선 탐색으로 끝까지 간다음 끝에 다다르면 첫 분기점으로 다시 돌아오는 재귀적인 수행을 하는 친구이고, - BFS는 넓이 우선 탐색으로 한 노드에 들어가서 연결된 노드들을 모두 탐색하고 다음 노드로 넘어가는 식의 친구이다. 구현적인 측면에서 DFS는 한 노드에 대해서 연결된 노드들을 재귀적으로 방문하여 첫 시작 노드로부터, 재귀가 종료될 때까지 자동으로 함수가 실행되고 종료되는 수행을 하고, BFS는 한 노드에 대해서 연결된 노드들을 모두 큐에 넣은 다음, 큐가 빌 때까지 다시 큐에서 한 노드를 꺼내 같은 수행을 반복하는 수행을 한다. 쓰임의 측면에서 (앞으로 내용이 더 추가될 부분.) DFS는 분기되는 응용에서 사용되고, BFS는 연결된 한 단지를 방문..

백준 2178번 - 미로 탐색 (그래프 탐색과 순회, 최단경로와 BFS)

BFS는 여기 적힌 대로, 큐를 사용해서 인접 노드들을 넓이에 우선하여 탐색하는 기법이다. 2차원 배열같은 맵에서는 갈 수 있는 곳들이 인접해있을 때, 그 구역 전체를 탐색하고 다음 구역으로 넘어가는 느낌의 수행을 하기도 한다. 1. 배경지식 - BFS와 최단경로 이번에 알아볼 BFS의 특징은 바로 최단경로이다. BFS는 말 그대로 너비 우선 탐색에 기반하는데, 너비라고도 할 수 있지만 트리에서 '높이'의 개념처럼 연결된 노드 중 같은 높이, 계층의 노드들을 먼저 모두 탐색한다. 따라서 원하는 노드에 다다랐다면, 최소한의 계층, 거리를 통과해 도착했다는 것이 보장된다. 따라서 BFS를 통한 경로가 곧 최단경로인 것이다. (단, 가중치가 모두 동일한 경우에 최단경로가 해당된다. 그렇지 않다면 가장 작은 가..

728x90
728x90