티스토리 뷰

 


[BOJ 1992(S1) 리뷰]

 

전에 풀었던 별찍기 문제와 비슷해서 금방 풀었다.

SIZE와 X,Y좌표를 받아서 범위에대해 같은값인지 확인하고 같은값이 아니라면 크기를 줄여가며 재귀함수에 넣어주면 된다. 첨에 재귀함수를 실행하는 순서를 잘못넣어서 좀 틀렸지만 순서를 바로잡아주니 바로 정답처리 되었다.

 


 

#include <iostream>
#include <queue>
#include <string>
#include <string.h>
#include <math.h>
using namespace std;
char table[100][100];
int n;

int check(int size,int x, int y)
{
	char ret = table[x][y];
	for (int i = x; i < x + size; i++)
	{
		for (int j = y; j < y + size; j++)
		{
			if (table[i][j] != ret) //다름
				return -1;
		}
	}

	return ret;
}


void func(int size,int x,int y)
{
	int cur = check(size, x, y);
	if (cur != -1)
	{
		cout << cur-'0';
		return;
	}
	cout << '(';
	int n = size / 2;
	func(n,x,y); 
	func(n, x, y + n);
	func(n,x+n ,y );
	func(n, x + n, y + n);
	cout << ')';
}


int main(void)
{
	cin.tie(0);
	ios::sync_with_stdio(0);
	memset(table, ' ', sizeof(table));
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
			cin >> table[i][j];
	}
	func(n, 0, 0);
}



 

'알고리즘 풀이 > 재귀' 카테고리의 다른 글

프로그래머스 : 124 나라의 숫자  (0) 2021.01.26
BOJ 1780 : 종이의 개수  (0) 2020.08.06
BOJ : 2447 별 찍기-10  (0) 2020.08.06
BOJ 1629 : 곱셈  (0) 2020.08.06
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함