-
[BFS] BOJ 10026 : 적록색약백준 문제풀이/GRAPH 2019. 10. 1. 21:27
문제 문제 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록), B(파랑) 중 하나를 색칠한 그림이 있다. 그림은 몇 개의 구역으로 나뉘어 있는데, 구역은 같은 색으로 이루어져 있다. 또, 같은 색상이 상하좌우로 인접해 있는 경우에 두 글자는 같은 구역에 속한다. (색상의 차이를 거의 느끼지 못하는 경우도 같은 색상이라 한다) 예를 들어, 그림이 아래와 같은 경우에 RRRBB GGBBB BBBRR BBRRR RRRRR 적록색약이 아닌 사람이 봤을 때 구역의 수는 총 4개이다. (빨강 2, 파랑 1, 초록 1) 하지만, 적록색약인 사람은 구역을 3개 볼 수 있..
-
[Brute Force] BOJ 14500 : 테트로미노백준 문제풀이/BRUTE FORCE 2019. 9. 6. 01:41
문제(삼성 sw 기출문제) 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변끼리 연결되어 있어야 한다. 즉, 꼭짓점과 꼭짓점만 맞닿아 있으면 안 된다. 정사각형 4개를 이어 붙인 폴리오미노는 테트로미노라고 하며, 다음과 같은 5가지가 있다. 아름이는 크기가 N×M인 종이 위에 테트로미노 하나를 놓으려고 한다. 종이는 1×1 크기의 칸으로 나누어져 있으며, 각각의 칸에는 정수가 하나 쓰여 있다. 테트로미노 하나를 적절히 놓아서 테트로미노가 놓인 칸에 쓰여 있는 수들의 합을 최대로 하는 프로그램을 작성하시오. 테트로미노는 반드시 한 정사각형이 정확히 하나의 칸을 포함하..
-
[DP] BOJ 9465 : 스티커백준 문제풀이/Dynamic Programming 2019. 8. 30. 21:57
문제 상근이의 여동생 상냥이는 문방구에서 스티커 2n개를 구매했다. 스티커는 그림 (a)와 같이 2행 n열로 배치되어 있다. 상냥이는 스티커를 이용해 책상을 꾸미려고 한다. 상냥이가 구매한 스티커의 품질은 매우 좋지 않다. 스티커 한 장을 떼면, 그 스티커와 변을 공유하는 스티커는 모두 찢어져서 사용할 수 없게 된다. 즉, 뗀 스티커의 왼쪽, 오른쪽, 위, 아래에 있는 스티커는 사용할 수 없게 된다. 모든 스티커를 붙일 수 없게된 상냥이는 각 스티커에 점수를 매기고, 점수의 합이 최대가 되게 스티커를 떼어내려고 한다. 먼저, 그림 (b)와 같이 각 스티커에 점수를 매겼다. 상냥이가 뗄 수 있는 스티커의 점수의 최댓값을 구하는 프로그램을 작성하시오. 즉, 2n개의 스티커 중에서 점수의 합이 최대가 되면서 ..
-
[DP] BOJ 2193 : 이친수백준 문제풀이/Dynamic Programming 2019. 8. 30. 01:01
문제 0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않는다. 이친수에서는 1이 두 번 연속으로 나타나지 않는다. 즉, 11을 부분 문자열로 갖지 않는다. 예를 들면 1, 10, 100, 101, 1000, 1001 등이 이친수가 된다. 하지만 0010101이나 101101은 각각 1, 2번 규칙에 위배되므로 이친수가 아니다. N(1 ≤ N ≤ 90)이 주어졌을 때, N자리 이친수의 개수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 주어진다. 출력 첫째 줄에 N자리 이친수의 개수를 출력한다. 풀이 문제 풀이 순서 < Bottom Up 방식 ..
-
[C/C++] memset 함수 기본 사용법 및 예제프로그래밍/C++ 2019. 8. 28. 01:36
사용 환경 · 목적 · 메모리의 시작점부터 연속된 범위를 임의의 값으로 초기화 하고 싶은 경우 사용 -> (모든 값은 바이트 단위로 저장된다.) 기본 함수 구조 · memset( void * ptr, int value, size_t num ); · ptr : 채우고자 하는 메모리의 시작 주소 · value : 채우고자 하는 값 · num : 채우고자 하는 메모리의 크기 취약점 · memset 함수는 1바이트 단위로만 동작하기 때문에 0,-1 을 제외한 다른 숫자는 원하는 값이 안 나올 수 있습니다. 대표적으로 int 는 32비트로 4바이트가 됩니다. · 여기에 1이란 값을 넣으면 1바이트 마다 0x01 이라는 값이 채워집니다. 그렇게 4바이트가 채워지면 0x( 01 01 01 01) 이 채워지면서 다른 ..
-
[C/C++] C++ STL Pair 기본 사용법 및 예제프로그래밍/C++ 2019. 8. 23. 08:48
사용 라이브러리 · 기본함수 선언문 · pair p; 생성 · make_pair(자료형, 자료형) : 두개의 원소를 묶은 pair를 만든다. 조회 · first : 첫번째 인자를 반환 · second : 두번째 인자를 반환 기본 응용 · vector · v.push_back( pair( 자료형, 자료형 ) ) : 보통 좌표값을 배열에 저장할때 사용 예제 코드 #include #include #include using namespace std; int main() { //////////선언//////// pair p; //////////생성/////// //둘다 차이 없으니 편한걸 사용 p = make_pair(1, 2); p = { 1,2 }; ////////응용/////// ve..
-
[C/C++] C++ STL Stack 기본 사용법 및 예제프로그래밍/C++ 2019. 8. 22. 16:05
사용 라이브러리 · 기본함수 선언문 · stack s; 삽입 및 추출 · push(element) : 가장 위에 원소를 삽입 · pop() : 가장 위에 있는 원소 추출 조회 · top() : 가장 위에 있는 원소를 가져옴 기타 함수 · empty() : 비어있는 경우 1을 , 그렇지 않은 경우 0을 반환 · size() : 원소의 수를 반환 예제 코드 #include #include using namespace std; int main() { stack s; ////////////삽입 및 추출///////////////// s.push(1); // 1 s.push(2); // 2 1 s.push(3); // 3 2 1 s.push(4); // 4 3 2 1 s.pop(); // 3 2 1..