목록Baekjoon/Gold (80)
GitHubSeob

문제 https://www.acmicpc.net/problem/2143 2143번: 두 배열의 합 첫째 줄에 T(-1,000,000,000 ≤ T ≤ 1,000,000,000)가 주어진다. 다음 줄에는 n(1 ≤ n ≤ 1,000)이 주어지고, 그 다음 줄에 n개의 정수로 A[1], …, A[n]이 주어진다. 다음 줄에는 m(1 ≤ m ≤ 1,000)이 주어지고, 그 www.acmicpc.net 문제풀이 부분 집합 중 연속된 부분으로 조합을 짜야한다. 먼저 A집합에 대해 이중 for문으로 메모이제이션을 이용해 연속된 부분의 합들을 구하고 sumA[합]의 개수를 늘려준다. 그 다음 B집합에 대해 똑같이 구한다. 대신에 sum을 구하면 sumA[T-sum]의 값을 answer에 더해준다. 코드 #includ..

문제 https://www.acmicpc.net/problem/2632 2632번: 피자판매 첫 번째 줄에는 손님이 구매하고자 하는 피자크기를 나타내는 2,000,000 이하의 자연수가 주어진다. 두 번째 줄에는 A, B 피자의 피자조각의 개수를 나타내 는 정수 m, n 이 차례로 주어진다 (3 ≤ m, n www.acmicpc.net 문제풀이 아래로 내리면 다시 푼 문제풀이가 있습니다. A 피자의 연속된 부분집합의 합을 구하고 unordered_map에 저장한다. 연속된 부분집합은 메모이제이션을 이용해서 이중 반복문으로 구한다. 피자는 원형이기 때문에 경우의 수를 아래와 같은 방법으로 구했다. idx1은 0부터 n-1까지, idx2는 합이 구하려는 조각보다 작다면 idx1의 바로 전 조각까지 구하도록 ..

문제 https://www.acmicpc.net/problem/1261 1261번: 알고스팟 첫째 줄에 미로의 크기를 나타내는 가로 크기 M, 세로 크기 N (1 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 미로의 상태를 나타내는 숫자 0과 1이 주어진다. 0은 빈 방을 의미하고, 1은 벽을 의미 www.acmicpc.net 문제풀이 입력을 받는 matrix벡터와 벽을 몇 번 부쉈는지 나타내는 visit벡터를 선언한다. BFS로 문제를 풀었으며 queue에는 { y, x, 벽 부순 횟수 } 순으로 입력을 push 했다. 네 방향을 탐색하면서 다음 칸의 visit벡터를 보면서 값이 -1 (방문을 하지 않음)이거나 벽이 있고 cnt+1보다 크면 큐에 push 하고, 벽이 없고 cnt보다 크면 방..

문제 https://www.acmicpc.net/problem/1644 1644번: 소수의 연속합 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000) www.acmicpc.net 문제풀이 에라토스테네스의 체를 이용하여 N까지의 소수를 미리 구해둔다. 그 다음 두포인터 부분을 구현하면 된다. 이중 for문, while문으로 구현해봤는데 시간차이가 안났다.. 1806번 문제 코드와 거의 비슷하게 구현했는데 이중for문 -> while문으로 바꿨는데 시간초과 나던코드가 통과한것으로 봐선 시간복잡도가 더 적은게 확실한데 왜 여기서는 차이가 없는지 모르겠다. 코드 #include #include using namespace std; int main() { ios::sync_with_stdio(f..

문제 https://www.acmicpc.net/problem/1806 1806번: 부분합 첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다. www.acmicpc.net 문제풀이 이런 식으로 sum값이 목푯값보다 작다면 sum+=arr[idx2]을 하고 idx2를 한 칸 오른쪽으로, sum값이 목푯값 이상이라면 answer값에 answer값과 idx2-idx2+1의 값 중 더 작은 값을 저장한다. 그다음, sum-=arr[idx]을 하고 idx를 한 칸 오른쪽으로 옮긴다. 처음에 배열을 N크기가 아닌 N+1만큼 사이즈로 생성하는 이유는 idx2..

문제 https://www.acmicpc.net/problem/1987 1987번: 알파벳 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으 www.acmicpc.net 문제풀이 BFS로 풀었다가 메모리 초과가 났고, DFS로 풀었다가 시간 초과가 났다. 질문글을 보니 DFS에 벡터를 넣어 벡터를 복사하게 되면 시간이 더 걸리므로 전역으로 선언하는 것이 좋다고 했다. 그 부분을 수정했더니 통과가 됐다. 크게 어려운 부분은 없다. 0, 0부터 시작하여 DFS로 모든 경우를 탐방하는데 이미 지나갔던 알파벳이 있는 곳은 가지 못하도록 조건만 걸면 된다. v..

문제 https://www.acmicpc.net/problem/2580 2580번: 스도쿠 스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루 www.acmicpc.net 문제풀이 0인 좌표를 큐에 넣고 숫자를 넣었으면 큐에서 pop 하는 식으로 풀었는데 숫자가 안 채워지는 부분이 있어 틀렸다. 다른 블로그를 참고해서 풀었다. 문제풀이는 모든 경우의 수를 탐색하고, 숫자가 채워졌으면 다음 0인 칸으로 가서 다시 숫자를 채운다. 다음 칸에서 9까지 확인을 했는데 다른 부분과 겹쳐 채워질 수 없으면 다시 전 칸으로 돌아와 다른 숫자로 채운다. 이런 식으로 모든 경..

문제 https://www.acmicpc.net/problem/1759 1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net 문제풀이 DFS가 아닌 비트마스크를 이용하여 문제를 풀었다. 글자를 모두 입력받고 정렬한다. 모든 경우의 수를 돌면서 해당 글자가 자음인지, 모음인지를 확인하고, 조건들을 만족했을 때 set인 answer에 insert 했다. 반복이 종료되면 set의 원소를 모두 출력한다. 코드 #include #include #include using namespace std; int main() { ios::..

문제 https://www.acmicpc.net/problem/5014 5014번: 스타트링크 첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다. www.acmicpc.net 문제풀이 다른 문제가 더 있는지는 모르겠지만 큐에 집어넣기 전에 visit과 정답을 확인하냐 안 하냐에 따라서 메모리 초과가 갈렸다. BFS로 풀었고 큐를 pair로 선언하여 현재 위치, 버튼을 누른 횟수를 push 했다. visit벡터를 이용해서 두 번 다시 같은 층을 가지 않도록 했다. 평범한 BFS문제인 것 같다. 크게 신경 써야 할 건 없는 것 같다. 처음 시작층과 0을 큐에 집어넣고 큐가 빌 때..