공부 및 정리

    C++의 기초 - 4

    * const - const가 붙은 변수는 상수로 처리됩니다. 1. const * #include int main() { int i = 6; const int *A = &i; (*A)++;//불가능, 컴파일 에러 printf("%d", *A); return 0; } - const *는 포인터 접근을 통한 값의 수정을 막습니다. - 즉, A의 포인터 값은 변경 가능하지만, A가 가리키는 데이터를 바꿀 수 없습니다. #include int main() { const int *A = new int(5); printf("%d\n", *A);//5 A = new int(7); printf("%d", *A); //7 return 0; } - 예를 들어, 위와 같은 코드는 멀쩡히 동작합니다. 왜냐하면, 주소는 A가 ..

    [C++] 백준 - 1202번 문제

    1202번: 보석 도둑 (acmicpc.net) 1202번: 보석 도둑 첫째 줄에 N과 K가 주어진다. (1 ≤ N, K ≤ 300,000) 다음 N개 줄에는 각 보석의 정보 Mi와 Vi가 주어진다. (0 ≤ Mi, Vi ≤ 1,000,000) 다음 K개 줄에는 가방에 담을 수 있는 최대 무게 Ci가 주어진다. (1 ≤ Ci www.acmicpc.net 1202번 : 보석 도둑 세계적인 도둑 상덕이는 보석점을 털기로 결심했다. 상덕이가 털 보석점에는 보석이 총 N개 있다. 각 보석은 무게 Mi와 가격 Vi를 가지고 있다. 상덕이는 가방을 K개 가지고 있고, 각 가방에 담을 수 있는 최대 무게는 Ci이다. 가방에는 최대 한 개의 보석만 넣을 수 있다. 상덕이가 훔칠 수 있는 보석의 최대 가격을 구하는 프로..

    [C++] 백준 - 9935번 문제

    9935번: 문자열 폭발 (acmicpc.net) 9935번: 문자열 폭발 첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모 www.acmicpc.net 9935번 : 문자열 폭발 상근이는 문자열에 폭발 문자열을 심어 놓았다. 폭발 문자열이 폭발하면 그 문자는 문자열에서 사라지며, 남은 문자열은 합쳐지게 된다. 폭발은 다음과 같은 과정으로 진행된다. 문자열이 폭발 문자열을 포함하고 있는 경우에, 모든 폭발 문자열이 폭발하게 된다. 남은 문자열을 순서대로 이어 붙여 새로운 문자열을 만든다. 새로 생긴 문자열에 폭발 문자열이 포함되어 있을 수도 있다. ..

    GOF 프로그래밍 패턴 - 경량 패턴

    * 인스턴싱과 관련이 있는 패턴입니다. 예시) 위와 같이 똑같은 나무를 잔뜩 심을 거라고 가정해 봅시다. 나무 객체 데이터 수십, 수백개를 저장한다면 메모리가 터져버리고 말겁니다. class Tree { private: Mesh mesh; Texture leaves; //.... Vector position; }; 위는 일반적인 트리 클래스의 정의입니다. 그러나, 우리는 메시부터 텍스쳐 등의 내용은 모두 동일하고 나무의 위치, 회전 각도 정도만 차이가 있다는 사실을 알 수 있습니다. 이번에는 경량 패턴을 적용해보겠습니다. class Tree { private: Mesh *mesh;//공통 내용은 주소화 Texture *leaves; //.... Vector position; }; 공통 내용이 주소로 변하..

    GOF 프로그래밍 패턴 - 명령 패턴

    * 예를 들어, 어떤 키를 입력받았을 때 위와 같은 명령을 수행한다고 가정합니다. void InputHandler::handleInput() { if(isPressed(BUTTON_X) jump(); else if(isPressed(BUTTON_Y) fireGun(); else if(isPressed(BUTTON_A) swap_weapon(); else if(isPressed(BUTTON_B) lurch(); } 아주 단순하게 코드를 짜면 위와 같이 짤 수 있을 것입니다. 하지만, 사용자가 키설정 바꿀 수 있는 게임이라면 이렇게 코딩하면 안될 것입니다. 따라서, 다음처럼 코드를 바꿔봅시다. class Command { public: virtual void execute() = 0; }; //상속 clas..

    [C++] 백준 - 25682번 문제

    25682번: 체스판 다시 칠하기 2 (acmicpc.net) 25682번: 체스판 다시 칠하기 2 첫째 줄에 정수 N, M, K가 주어진다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 25682번 : 체스판 다시 칠하기 2 지민이는 자신의 저택에서 MN개의 단위 정사각형으로 나누어져 있는 M×N 크기의 보드를 찾았다. 어떤 정사각형은 검은색으로 칠해져 있고, 나머지는 흰색으로 칠해져 있다. 지민이는 이 보드를 잘라서 K×K 크기의 체스판으로 만들려고 한다. 체스판은 검은색과 흰색이 번갈아서 칠해져 있어야 한다. 구체적으로, 각 칸이 검은색과 흰색 중 하나로 색칠되어 있고, 변을 공유하는 두 개의 사각형은 다른 색으로 칠해져..

    [C++]백준 - 17299번 문제

    17299번: 오등큰수 (acmicpc.net) 17299번: 오등큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net 17299번 : 오등큰수 크기가 N인 수열 A = A1, A2, ..., AN이 있다. 수열의 각 원소 Ai에 대해서 오등큰수 NGF(i)를 구하려고 한다. Ai가 수열 A에서 등장한 횟수를 F(Ai)라고 했을 때, Ai의 오등큰수는 오른쪽에 있으면서 수열 A에서 등장한 횟수가 F(Ai)보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미한다. 그러한 수가 없는 경우에 오등큰수는 -1이다. 예를 들어, A = [1, 1, 2, 3, ..

    [C++]백준 - 2143번 문제

    2143번: 두 배열의 합 (acmicpc.net) 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 2143번 : 두 배열의 합 한 배열 A[1], A[2], …, A[n]에 대해서, 부 배열은 A[i], A[i+1], …, A[j-1], A[j] (단, 1 ≤ i ≤ j ≤ n)을 말한다. 이러한 부 배열의 합은 A[i]+…+A[j]를 의미한다. 각 원소가 정수인 두 배열 A[1], …, A[n]과 B[1], …, B[m]이 주..