목록분류 전체보기 (370)
GitHubSeob

문제 https://www.acmicpc.net/problem/1406 1406번: 에디터 첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수 www.acmicpc.net 문제풀이 처음에 string insert, erase를 써서 풀었는데 시간 초과가 나서 질문글을 보다가 stack으로 푼 사람이 있어서 stack으로 풀었다. stack을 두 개를 선언하여 앞, 뒤 스택을 만들었다. 명령어는 L, D, B, P로 총 네 가지가 있다. L일 때는 왼쪽으로 한 칸 이동이므로 앞 스택의 top값을 뒷 스택에 push 하고 앞 스택을 pop 한다. 그러면 앞 스택의 ..

문제 https://programmers.co.kr/learn/courses/30/lessons/86491 코딩테스트 연습 - 8주차_최소직사각형 [[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]] 120 [[14, 4], [19, 6], [6, 16], [18, 7], [7, 11]] 133 programmers.co.kr 문제풀이 sizes를 탐색하면서 [idx1][0]인 부분을 더 큰 수, [idx1][1]인 부분을 더 작은 수로 바꾼다. [idx1][0]끼리, [idx1][1]끼리 max_length값을 계속 경신한다. 둘을 곱한 값을 return 한다. 코드 #include #include #include using namespace std; int solution..

문제 https://programmers.co.kr/learn/courses/30/lessons/87389 코딩테스트 연습 - 나머지가 1이 되는 수 찾기 자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다. 제한사항 입 programmers.co.kr 문제풀이 1부터 n-1까지 반복하면서 n을 해당 수로 나눴을 때 나머지가 1이면 return 한다. 코드 #include #include using namespace std; int solution(int n) { for(int idx=1;idx

문제 https://www.acmicpc.net/problem/7453 7453번: 합이 0인 네 정수 첫째 줄에 배열의 크기 n (1 ≤ n ≤ 4000)이 주어진다. 다음 n개 줄에는 A, B, C, D에 포함되는 정수가 공백으로 구분되어져서 주어진다. 배열에 들어있는 정수의 절댓값은 최대 228이다. www.acmicpc.net 문제풀이 A에서 하나, B에서 하나, C에서 하나, D에서 하나를 무조건 골라 합이 0인 개수를 구하는 문제이다. 이중 for문으로 A와 B를 하나씩 고른 값을 sumAB에 저장, C와 D를 하나씩 고른 값을 sumCD에 저장한다. upper, lower bound를 이용하기 위해 각 벡터를 오름차순으로 정렬한다. for문으로 sumAB를 탐색하면서 sumCD에서 -sumA..

문제 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..