일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 백준위
- 프로그래머스
- 네트워크 관리사
- 싸피
- html
- 우테코
- Java
- 카카오
- 코딩테스트
- KT
- java 객체지향 프로그래밍
- 네트워크 관리사 2급 실기
- 리얼클래스
- 네트워크 관리사 2급
- SSAFYcial
- 인앱결제
- it 이슈
- IT 트렌드
- IT 동향
- SSAFY 7기
- 신문스크랩
- SSAFY
- 신문 스크랩
- 코테
- 코딩테스트 연습
- 백준
- 구글
- python
- it 뉴스
- 싸피셜
Archives
- Today
- Total
개발자일걸요..?
2630번 색종이 만들기 본문
728x90
반응형
문제링크 : www.acmicpc.net/problem/2630
2630번: 색종이 만들기
첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다.
www.acmicpc.net
<알고리즘>
1) 주어진 수들을 vector에 넣기
2) vector를 4분할로 나누는 쿼드트리를 이용하여 병합 가능한지 확인
2-1) 병합이 불가능하면 pass(반복을 통해 그부분을 또 4분할 할것이기에)
2-2) 병합이 가능하면 answer에 병합된 부분 색 입력
3) 병합이 안되는 부분의 4분할을 반복해서 answer에 결과값 입력
4) answer에서 숫자 1과 0을 세서 결과값 출력
+) 아주 많이 참고한 블로그
chessire.tistory.com/entry/%EC%BF%BC%EB%93%9C%ED%8A%B8%EB%A6%ACQuad-tree
쿼드트리(Quad tree)
자료구조 카테고리를 만들까 하다가 알고리즘 카테고리에 작성합니다. 쿼드트리란? 트리 자료구조중 하나로 부모 노드 아래에 자식 노드를 4개(Quad)씩 가지고 있는 트리입니다. 이미지 용량,
chessire.tistory.com
메모리 : 2152KB 시간 : 4ms
#include<iostream>
#include<vector>
#include<string>
using namespace std;
string answer = "";
void quadTree(vector<vector<int>> &p, int X, int Y, int size) {
bool iscombine = true;
int begin = p[X][Y];
for (int y = Y; y < Y + size; y++) {
for (int x = X; x < X + size; x++) {
if (begin != p[x][y]) {
iscombine = false;
break;
}
}
if (iscombine == false) break;
}
if (iscombine) {
answer.append(to_string(begin));
return;
}
size = int(size / 2);
answer.append("(");
quadTree(p, X, Y, size);
quadTree(p, X + size, Y, size);
quadTree(p, X, Y + size, size);
quadTree(p, X + size, Y + size, size);
answer.append(")");
}
int main() {
int N = 0;
cin >> N;
vector<vector<int>> paper(N + 1, vector<int>(N + 1));
int input = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cin >> input;
paper[i][j] = input;
}
}
quadTree(paper, 0, 0, N);
int white = 0;
int blue = 0;
for (unsigned int i = 0; i < answer.size(); i++) {
if (answer[i] == '(' || answer[i] == ')')
continue;
else if (answer[i] == '1') ++blue;
else if (answer[i] == '0')++white;
}
cout << white << "\n" << blue;
return 0;
}
반응형
'알고리즘코딩 > Baekjoon Online Judge' 카테고리의 다른 글
1780번 종이의 개수 (0) | 2021.03.01 |
---|---|
1992번 쿼드트리 (0) | 2021.03.01 |
10816번 숫자카드2 (0) | 2021.02.28 |
1920번 수 찾기 (0) | 2021.02.28 |
5430번 AC (0) | 2021.02.27 |
Comments