전체 글 123

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

[그리디 알고리즘/Brute Force] A와 B 2

예제 입력 1 A BABA 예제 출력 1 1 예제 입력 2 BAAAAABAA BAABAAAAAB 예제 출력 2 1 예제 입력 3 A ABBA 예제 출력 3 0 - 거꾸로 T에서 S를 만들어 가면서 가능한지 풀어본다. - 직접 무작정 다 돌려보면 시간복잡도가 2^49이기 때문에 불가능하다. - 현재 T의 마지막 글자가 A이면 반드시 A연산을 이용해야하며, 첫글자가 B이면 B연산을 이용했음을 알 수 있다. 그런데 첫글자가 B이고 마지막이 A이면 A와 B연산 모두 가능한데, 재귀로 구현하여 두 가지 모두 고려한다. // A --- A : A연산 // A --- B : 불가능 // B --- A : A연산과 B연산 모두 가능 // B --- B : B연산 - 두 방법으로 나누어지는 경우가 총 N-1번 있다. -..

카테고리 없음 2019.11.24

[그리디 알고리즘] 롤러코스터

예제 입력 1 3 3 5 1 3 2 4 8 1 1 2 예제 출력 1 RRDLLDRR - 모든 칸을 방문하면 된다. 첫번째 경우는 행의 개수가 홀수일 때, 두번째 경우는 열의 개수가 홀수일 때이다. (다른 요소가 짝수여도 상관없음을 확인할 수 있다.) - 그러나, 행/열의 개수가 짝수이면 1개 칸은 반드시 방문할 수 없다. 이는 체스판으로 증명 가능하다. 검정에서 출발하여 검정으로 가야만 하는데, 검정->흰색->검정->흰색-> ... -> 검정으로 도달하려면 반드시 1개의 흰색을 방문하지 못하게 된다. 따라서, 검은 칸이면서 + 가장 작은 수가 있는 칸을 방문하지 않으면 된다. - 풀이 Step 1) 문제의 조건에 따라 시작점을 (0,0), 끝점을(R-1,C-1)로 잡는다. 시작점을 이동시키는데, 끝점도 ..