Algorithm 98

괄호

9012번: 괄호 (acmicpc.net) 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 예제 입력 1 6 (())()) (((()())() (()())((())) ((()()(()))(((())))() ()()()()(()()())() (()((())()( 예제 출력 1 NO NO YES NO YES NO 예제 입력 2 3 (( )) ())(() 예제 출력 2 NO NO NO - 스택을 사용하여 풀 수도 있지만, 간단한 방법이 있다. - cnt 변수를 두고 0으로 시작하여 '..

3. 동적 배열 구현

[ 최종 구현(C#) ] using System; using System.Collections.Generic; namespace Test { public class MyList { private static int DEFAULT_SIZE = 1; private T[] Data = new T[DEFAULT_SIZE]; public int Count { get; private set; } = 0; // 현재 저장되어있는 개수 public int Capacity // 최대로 저장 가능한 용량 { get { return Data.Length; } } public void Add(T item) { // 공간이 없을 경우 공간을 확보한다 = 현재 공간 * 2 if(Count >= Capacity) { T[] new..

[Brute Force] 캠프 준비

예제 입력 1 3 5 6 1 1 2 3 예제 출력 1 2 2번, 3번 문제를 고르는 방법, 모든 문제를 고르는 방법이 가능하다. 예제 입력 2 4 40 50 10 10 20 30 25 예제 출력 2 2 난이도가 10, 30인 문제를 고르거나, 20, 30인 문제를 고르면 된다. 예제 입력 3 5 25 35 10 10 10 20 10 20 예제 출력 3 6 https://www.acmicpc.net/problem/16938 16938번: 캠프 준비 난이도가 10, 30인 문제를 고르거나, 20, 30인 문제를 고르면 된다. www.acmicpc.net - N 제한이 15이므로, 15개 중 2개 이상의 수를 뽑아서 해당 조건에 만족하는지 체크하고 만족하면 결과+1하도록 구현하였다. [ 결과(C++17) ] ..

[Brute Force] 두 스티커

예제 입력 1 2 2 2 1 2 2 1 예제 출력 1 4 예제 입력 2 10 9 4 2 3 1 1 5 10 9 11 예제 출력 2 56 예제 입력 3 10 10 3 6 6 7 7 20 5 예제 출력 3 0 https://www.acmicpc.net/problem/16937 16937번: 두 스티커 첫째 줄에 모눈종이의 크기 H, W, 둘째 줄에 스티커의 수 N이 주어진다. 다음 N개의 줄에는 스티커의 크기 Ri, Ci가 주어진다. www.acmicpc.net - 직접 배열에 붙여보면서 하지 않아도 된다. 스티커는 주어진 스티커에서 2개만 뽑아서 가장 넓게 붙여라는 것이 문제의 조건이었으므로, 아래와 같이 Case #1, #2로 모눈종이 안에 들어오는지 체크하고 들어온다면 넓이를 계산하여 최대값을 저장한다..

[Brute Force] 나3곱2

예제 입력 1 6 4 8 6 3 12 9 예제 출력 1 9 3 6 12 4 8 예제 입력 2 4 42 28 84 126 예제 출력 2 126 42 84 28 - 나3은 계속 숫자가 작아지고, 곱2는 숫자가 계속 커진다. - 각 수를 소인수분해하여, 조건1 - 3이 제일 많은 순 조건2 - 조건1이 같으면 숫자가 작은 순 위 조건으로 정렬하면 된다. #include using namespace std; constexpr int MAX_SIZE = 100; int N; class number { public: long long num; long long cnt2; long long cnt3; number() {} number(int n) : num(n) { cnt2 = cnt3 = 0; } bool oper..

[Brute Force] 십자가 찾기

예제 입력 1 6 8 ....*... ...**... ..*****. ...**... ....*... ........ 예제 출력 1 3 3 4 1 3 5 2 3 5 1 예제 입력 2 5 5 .*... ****. .**** ..**. ..... 예제 출력 2 3 2 2 1 3 3 1 3 4 1 예제 입력 3 5 5 .*... ***.. .*... .*... ..... 예제 출력 3 -1 예제 입력 4 3 3 *.* .*. *.* 예제 출력 4 -1 - 맵을 돌면서, *이면 십자가 크기를 점점 늘려가며 만들기를 시도하는식으로 접근했다. - 문제의 출력 조건에, "필요한 십자가의 수 k"는 0부터라고 되어있어서 빈칸(전부 .)로 넣으면 0만 출력하도록 구현했는데 다행히 정답 #include constexpr ..

[Brute Force] 로마 숫자 만들기

예제 입력 1 1 예제 출력 1 4 I, V, X, L을 만들 수 있다. 예제 입력 2 2 예제 출력 2 10 2, 6, 10, 11, 15, 20, 51, 55, 60, 100을 만들 수 있다. 예제 입력 3 10 예제 출력 3 244 https://www.acmicpc.net/problem/16922 16922번: 로마 숫자 만들기 2, 6, 10, 11, 15, 20, 51, 55, 60, 100을 만들 수 있다. www.acmicpc.net - 그냥 N개의 각 자리수에 I, V, X, L을 선택해서 N번 재귀를 돌리면 시간 초과가 난다. (최대 N = 20이므로, 4^20) - 따라서, I, V, X, L을 각각 몇개씩 선택할건지 골라서 4번 재귀를 돌리는 방법으로 해결했다. - 선택한 숫자의 개..

[분할 정복] 하노이 탑 이동 순서

예제 입력 1 3 예제 출력 1 7 1 3 1 2 3 2 1 3 2 1 2 3 1 3 https://www.acmicpc.net/problem/11729 11729번: 하노이 탑 이동 순서 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 옮기려 한다. 한 번에 한 개의 원판만을 다른 탑으로 옮길 수 있다. 쌓아 놓은 원판은 항상 위의 것이 아래의 것보다 작아야 한다. 이 작업을 수행하는데 필요한 이동 순서를 출력하는 프로그램을 작성하라. 단, 이동 횟수는 최소가 되어야 한다. 아래 그림은 원판이 5 www.acmicpc.net - 이동 횟수는 N개의 원판을 옮길..

[분할 정복] 숫자 카드

예제 입력 1 5 6 3 2 10 -10 8 10 9 -5 2 3 4 5 -10 예제 출력 1 1 0 0 1 1 0 0 1 https://www.acmicpc.net/problem/10815 10815번: 숫자 카드 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이가 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다. 두 숫자 카드에 같은 수가 적혀있는 경우는 없다. 셋째 줄에는 M(1 ≤ M ≤ 500,000)이 주어진다. 넷째 줄에는 상근이가 가지고 있는 숫자 카드인지 아닌지를 구해야 할 M개의 정수가 주어지며, 이 www.acmicpc.net #inc..