목록Baekjoon/Silver (86)
GitHubSeob

문제 https://www.acmicpc.net/problem/10815 10815번: 숫자 카드 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net 문제풀이 상근이가 가지고 있는 카드 card, 가지고 있는지 확인하는 check 벡터 두 개를 이용한다. 확인하는 카드 수만큼 반복하면서 이분 탐색을 한다. 상근이의 카드들을 정렬시켜야 이분 탐색이 가능하다. 확인 카드를 들고 상근이의 카드 목록을 보면서 이 카드가 있는지를 확인한다. low와 high를 가지고 가운데인 mid값을 도출하면서 상근이의 카드[mid..

문제 https://www.acmicpc.net/problem/14225 14225번: 부분수열의 합 수열 S가 주어졌을 때, 수열 S의 부분 수열의 합으로 나올 수 없는 가장 작은 자연수를 구하는 프로그램을 작성하시오. 예를 들어, S = [5, 1, 2]인 경우에 1, 2, 3(=1+2), 5, 6(=1+5), 7(=2+5), 8(=1+2+5)을 만들 www.acmicpc.net 문제풀이 비트 마스크를 이용하여 풀었다. 숫자가 1, 2, 3을 입력받았을 경우, 1, 2, 3, 1+2, 1+3, 2+3, 1+2+3의 7가지 경우가 있다. 1부터 7까지의 이진수를 표현하고, 0인 부분은 더하지 않고 1인 부분만 더하게 되면 부분 수열의 합을 모두 구할 수 있다. 자연수는 1부터 이므로 i=1부터, 1 N..

문제 https://www.acmicpc.net/problem/9205 9205번: 맥주 마시면서 걸어가기 송도에 사는 상근이와 친구들은 송도에서 열리는 펜타포트 락 페스티벌에 가려고 한다. 올해는 맥주를 마시면서 걸어가기로 했다. 출발은 상근이네 집에서 하고, 맥주 한 박스를 들고 출발한다. www.acmicpc.net 문제풀이 BFS로 풀었다. 집, 편의점, 락 페스티벌 좌표를 입력한다. 맥주 한 병에 50m, 최대 20병이기 때문에 집에서 출발하거나 편의점에서 출발했을 때 최대 1000m 범위 안에 있는 거리를 갈 수 있다. 집 좌표를 큐에 넣고 편의점 하나하나 비교해보면서 방문한 적이 없고, 거리가 1000m 이하인 편의점이 있으면 좌표를 큐에 집어넣는다. 좌표를 큐에 집어넣었으면 방문 표시를 한..

문제 https://www.acmicpc.net/problem/2468 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net 문제풀이 DFS로 문제를 풀었다. 비 오면 잠기는 높이를 0부터 설정하여 최대 높이-1까지 반복한다. 벡터 범위 안을 돌면서 물에 잠기지 않은 지역을 발견하면 큐에 push를 하고 queue가 빌 때까지 상하좌우를 살핀다. 땅이 잠기지 않았고 방문을 한 적이 없으면 방문하고 큐에 push 한다. 큐가 비면 안전 영역의 개수를 하나 늘린다. 벡터 범위 안을 다 돌았으면 비 오면 잠기는 높이를 1 높이..

문제 https://www.acmicpc.net/problem/11725 11725번: 트리의 부모 찾기 루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오. www.acmicpc.net 문제풀이 BFS를 이용하여 풀었다. 1 2를 입력받으면 양방향 간선이므로 tree[1]에 2를 push, tree[2]에 1을 push 했다. 큐가 빌 때까지 반복하면서 해당 정점과 연결된 정점들을 방문한 적이 없으면 큐에 push 하고 방문한다. 현재 노드가 1이고 다음 노드가 2이면, 2의 부모 노드는 1이 된다. 큐가 비면 반복문을 종료하고 1을 제외한 2부터 N까지 부모 노드를 저장한 벡터의 값들을 출력한다. vectortree(N + 1, vec..

문제 https://www.acmicpc.net/problem/1991 1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1≤N≤26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 영문자 www.acmicpc.net 문제풀이 void Preorder(char node, const vector& tree) { cout left_child >> right_child; tree[parent - 'A'][0] = left_child; tree[parent - 'A'][1] = right_child; } Preorder('A', tree); cout

문제 https://www.acmicpc.net/problem/7569 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net 문제풀이 토마토 문제를 아직 안 풀었다면 7576번 먼저 푸는 것을 추천함. 7576번은 2차원, 7569번은 3차원 문제 https://www.acmicpc.net/problem/7576 3차원 배열을 거의 안 쓰다 보니 그 부분에서 좀 헤맸다. 입력받을 때 토마토가 0or1이면 도달해야 되는 토마 토수 +1, 1이면 현재 익은 토마토 수 +1, 큐에 좌표값을 집어넣..

문제 https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net 문제풀이 전형적인 DFS문제이다. 입력받는 값들을 표처럼 virus벡터에 push한다. 문제에서 1번 컴퓨터 부터시작하라 했으므로 DFS(1)을 실행하여 1부터 시작한다. DFS함수를 실행했으면 visit벡터에 방문한걸 표시하고 크기만큼 반복해서 깊이탐색을 시작한다. 방문안한 노드를 발견하면 DFS를 하고 answer값에 1을 더한다. 1->2 2->3 3번 컴퓨터랑 연결된 2번 컴퓨터는 이미 방..

문제 https://www.acmicpc.net/problem/2156 2156번: 포도주 시식 효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규 www.acmicpc.net 문제풀이 OXXOO OXOO OXXO OXO 포도주는 3번 연속 마실수 없다, 경우의 수에서 3번 연속 안 마시고 최댓값을 낼 수 없다. 따라서 N번째를 마신다고 가정했을 때 DP[N] = DP[i-4] + Arr[i-1] or DP[i-3] + Arr[i-1] or DP[i-3] or DP[i-2] 중 최대값에 Arr[N]값을 더한 값이다. DP[N]은 N번째를 무조건 마신다고 가정하였으므로..