[알고리즘] 1. [C/C++] 4방향 체인코드를 이용한 논 크기 측정 문제
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
알고리즘 문제 공부를 하고 있는데,
정리하여 공부겸 포스팅 할려 합니다.
'논 그룹묶기 문제' 이며,
0은 논이아니고 1은 논입니다.
2차원 배열 nxn으로 구성되어있으며,
test.txt의
첫 줄에는 테스트 케이스 숫자
다음 줄 부터는 nxn의 배열 크기 , 배열 값 순으로 되어있는 것을 읽으면 됩니다.
이 후 체인코드로 그룹핑된 갯수와
각 그룹들의 크기를 출력하는 문제입니다.
8방향 체인코드 또한 구성됩니다.
test.txt는 '알고리즘 자료' 카테고리의 첫번째에 답과 함께 올려 놓았습니다.
다음은 구현 코드이며, 알고리즘으로는,
모든 배열 인덱스에 접근하지만, 이미 그룹화 된 값과 0은 제외를 하고,
방문 할 때마다 그룹 값을 넣고,
그룹화가 끝나면, GroupNum을 증가시켜, 다시 시작하는 방법입니다.
값을 얻을 수 있습니다.
일종의 완전 탐색이지만, 예외조건이 있기에, 모든 곳을 탐색하진 않습니다.
아래 코드에서, 대각선 조건만 추가한다면, 8방향 체인코드로 구성됩니다.
#include#include using namespace std; class NoN{ public: int size; }; NoN InitialNoN(int size) { NoN mData; mData.size = size; return mData; } bool IsOutBoard(int arrSize, int y, int x) { if (y < 0 || x < 0 || y >= arrSize || x >= arrSize) return true; return false; } bool IsZeroOrGroupCheck(int y, int x, int **board) { if (board[y][x] != 1) return true; return false; } int Lableling(int arrSize,int **board,int y,int x,int group) { if (IsOutBoard(arrSize,y,x)) return 0; if (IsZeroOrGroupCheck(y,x,board)) return 0; board[y][x] = group; int result = 1; int t1 = Lableling(arrSize, board, y + 1, x, group); // Down int t2 = Lableling(arrSize, board, y - 1, x, group); // Up int t3 = Lableling(arrSize, board, y, x + 1, group); // Right int t4 = Lableling(arrSize, board, y, x - 1, group); // Left return result + t1 + t2 + t3 + t4; } void InitialBoard(int arrSize, int** board) { for (int i = 0; i < arrSize; i++) { for (int j = 0; j < arrSize; j++) { board[i][j] = 0; } } } int** SetBoard(int arrSize) { int ** board = new int*[arrSize]; for (int i = 0; i < arrSize; i++) board[i] = new int[arrSize]; InitialBoard(arrSize, board); return board; } void AllDeleteBoard(int **board,int arrSize) { for (int i = 0; i < arrSize; i++) delete board[i]; } int _tmain(int argc, _TCHAR* argv[]) { FILE *fp = fopen("test.txt", "rt"); if (fp == NULL) { cout << "FILE OPEN ERROR" << endl; return 0; } int T = 0; fscanf(fp, "%d\n", &T); for (int i = 0; i < T; i++) { vector mData; int group = 2; int arrSize = 0; fscanf(fp, "%d\n", &arrSize); int ** board = SetBoard(arrSize); char temp; for (int j = 0; j < arrSize; j++) for (int k = 0; k < arrSize; k++) fscanf(fp, "%d%c", &board[j][k], &temp); for (int j = 0; j < arrSize; j++){ for (int k = 0; k < arrSize; k++){ if (IsZeroOrGroupCheck(j, k, board)) continue; int check = Lableling(arrSize, board, j, k, group); mData.push_back(InitialNoN(check)); group++; } } cout << "#" << i + 1 << " : " << mData.size(); for (int vec = 0; vec < mData.size(); vec++) cout << " " << mData[vec].size << " "; cout << endl; AllDeleteBoard(board, arrSize); } return 0; }
추가로 읽으면 좋을 것
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
이 블로그의 인기 게시물
윤석열 계엄령 선포! 방산주 대폭발? 관련주 투자 전략 완벽 분석
## 1. 배경 2024년 12월 3일, 윤석열 대통령이 국가 비상사태를 이유로 계엄령을 선포하였습니다. 계엄령은 전시나 사변 등 국가의 안녕과 공공질서가 심각하게 위협받을 때 대통령이 군사적 권한을 통해 이를 방어하고 유지하기 위해 발효하는 특별한 조치입니다. 이러한 조치는 국내 정치·경제 전반에 큰 영향을 미치며, 특히 주식시장에서는 관련 기업들의 주가 변동이 예상됩니다. 24.12.03 오전 5시 계엄 해제로 아래 관련주 추천 - [윤석열 계엄령 해제! 이재명 관련주 급등? 투자자 필독 전략](https://warguss.blogspot.com/2024/12/yoon-martial-law-lift-lee-jaemyung-stocks.html) --- ## 2. 기업 및 관련주 ### 2-1 식품 관련주 - 계엄령이 선포되면 사회적 불안정성이 증가할 수 있으며, 이에 따라 생필품 및 음식 관련 주식이 단기적으로 강세를 보일 가능성이 있습니다. #### 1. CJ제일제당 (KOSPI: 097950) [시가총액: 약 10조 원] - **주요 산업**: 식품 및 생필품 제조 - **관련주 근거**: 국가적 위기 상황에서 식료품 수요가 증가하며, 즉석밥, 가공식품 등의 판매가 확대될 가능성이 있습니다. - **주가정보**: [네이버 차트](https://finance.naver.com/item/main.nhn?code=097950) #### 2. 오뚜기 (KOSPI: 007310) [시가총액: 약 3조 원] - **주요 산업**: 식품 제조 및 유통 - **관련주 근거**: 라면, 즉석식품 등 비축 가능한 식품 수요가 증가하며, 매출 상승이 기대됩니다. - **주가정보**: [네이버 차트](https://finance.naver.com/item/main.nhn?code=007310) #### 3. 대상 (KOSPI: 001680) [시가총액: 약 2조 원] - **주요 산업**: 식품 제조 및 발효제품 - **관련주 근거**: 계엄...
대통령 퇴진운동 관련주: 방송·통신·촛불수혜주 완벽 분석
--- ## 1. 배경 2024년 12월 3일, 윤석열 대통령이 비상계엄령을 선포했으나, 짧은 시간 내에 이를 해제하면서 정치적 긴장감이 커졌습니다. 이에 따라 대규모 촛불시위와 같은 사회적 움직임이 예상되며, 통신과 관련된 기업 및 촛불 제조와 연관된 산업에 관심이 모이고 있습니다. --- ## 2. 기업 및 관련주 대규모 시위 및 관련 활동으로 인해 통신, 미디어, 그리고 촛불 제조와 관련된 기업들이 단기적인 수혜를 볼 것으로 예상됩니다. ### 2-1. 통신 관련주 #### 1. **KT (030200) [약 12조 원]** - **주요 산업:** 통신 - **관련주 근거:** 시위 생중계 및 대규모 통신 트래픽 증가로 매출 증대 가능성 - **주가정보:** [네이버 차트](https://finance.naver.com/item/main.nhn?code=030200) #### 2. **SK텔레콤 (017670) [약 12조 원]** - **주요 산업:** 통신 - **관련주 근거:** 대규모 데이터 사용 증가로 인한 수익 상승 - **주가정보:** [네이버 차트](https://finance.naver.com/item/main.nhn?code=017670) #### 3. **LG유플러스 (KOSPI, 032640) [약 4.9조 원]** - **주요 산업:** 통신 - **관련주 근거:** 촛불시위로 인한 데이터 및 음성 서비스 사용 증가 예상 - **주가정보:** [네이버 차트](https://finance.naver.com/item/main.nhn?code=032640) --- ### 2-2. 방송 관련주 #### 1. **SBS (034120) [약 2,924억 원]** - **주요 산업:** 방송 및 미디어 콘텐츠 제작 - **관련주 근거:** 시위 관련 특집 방송 및 실시간 보도에 따른 광고 수익 증가 - **주가정보:** [네이버 차트](https://finance.naver.com/item/main.nhn?code...
키움 OPEN API MFC 개발 (1)
* 키움 API 개발 - visual studio 2019 , MFC * Visual Studio Set - 새 프로젝트 만들기 / MFC 검색 - 다음 이후, MFC 설정에서 어플리케이션 종류 변경 (대화 상자 기반) * 기본 적용 Flow ( https://www.kiwoom.com/nkw.templateFrameSet.do?m=m1408000000 ) = 우선 생략하고, Step 2 설치 = Step 3 자료실/ KhOpenApiTest_2.71.zip 다운로드 * Step 2 설치 후, 설치 경로의 OpenAPI 디렉토리 찾기 1. 파일 찾기 2. KHOpenAPI.ocx 를 프로젝트 소스에 복사 * Step 3 자료실/다운로드 1. khOpenApiTest_2.71.zip 다운/압축 풀고, 2. KHOpenAPI.cpp/h KHOpenAPICtrl.cpp/h 프로젝트 소스에 복사 * 내부 소스에 다음추가 header에 class 생성 cpp에 다음 소스 추가 * 리소스 뷰 > IDD_TRADINGAPP_DIALOG 1. 확인 우클릭 > Active X 컨트롤 삽입 2. KHOpenAPI Control 적용 하면 위 화면처럼 적용 이후 실행 시 다음 화면 이후 매수/매도 적용
댓글
댓글 쓰기