#include <iostream>

using namespace std;

void swap(int *arr, bool *table, int a, int b) {
	int temp = arr[b];
	arr[b] = arr[a];
	arr[a] = temp;
	table[a] = table[b] = true;
}

int main() {
	int len;
	cin >> len;
	if (len < 3 && len > 50000) {
		return 0;
	}
	int *arr = new int[len];
	bool *table = new bool[len];
	for (int i = 0; i < len; i++) {
		cin >> arr[i];
		table[i] = false;
	}

	for (int i = 0; i < len-1; i++) {
		int temp = arr[i];
		for (int j = i+1; j < len; j++) {
			if (arr[j] == temp - 1 && table[i] == false && table[j] == false) {
				swap(arr, table, i, j);
			}
		}
	}

	for (int i = 0; i < len; i++) {
		cout << arr[i]<< " ";
	}

	cin >> arr[1];
	return 0;
}

'컴퓨터 > 문제 풀기' 카테고리의 다른 글

백준 16955번 오목, 이길 수 있을까?  (0) 2019.05.20
10799번 쇠막대기  (0) 2019.05.13
2309번 일곱 난쟁이  (0) 2019.05.13
백준 1780번 종이의 개수  (0) 2019.05.13
백준 2688번 줄어들지 않아  (0) 2019.05.13
#include <iostream>

using namespace std;

int arr[9];
int result[7];
int result2[7];

void bubblesort(int *arr, int len) {
	for (int i = 0; i < len-1; i++) {
		for (int j = 0; j < len-i-1; j++) {
			if (arr[j] > arr[j + 1]) {
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
}

void is100(int index, int select, int sum) {
	if (sum == 100 && index == 7) {
		for (int i = 0; i < 7; i++) {
			result2[i] = result[i];
		}
		return;
	}
	if (index >= 7) {
		return;
	}
	for (int i = select; i < 9; i++) {
		result[index] = arr[i];
		is100(index+1, i+1, sum + arr[i]);
		result[index] = 0;
	}
}

int main() {
	for (int i = 0; i < 9; i++) {
		cin >> arr[i];
	}
	
	is100(0, 0, 0);
	bubblesort(result2, 7);

	for (int i = 0; i < 7; i++) {
		cout << result2[i] << endl;
	}

	return 0;
}

'컴퓨터 > 문제 풀기' 카테고리의 다른 글

백준 16955번 오목, 이길 수 있을까?  (0) 2019.05.20
10799번 쇠막대기  (0) 2019.05.13
2413번 비슷한 순열  (1) 2019.05.13
백준 1780번 종이의 개수  (0) 2019.05.13
백준 2688번 줄어들지 않아  (0) 2019.05.13
#include <iostream>

using namespace std;

int minus1 = 0;
int zero = 0;
int one = 0;

bool is_same1(int **paper, int N, int x, int y) {
	int first_num = paper[x][y];
	for (int i = x; i < x+N; i++) {
		for (int j = y; j < y+N; j++) {
			if (first_num != paper[i][j])	return false;
		}
	}
	return true;
}

int divide_N_count(int **paper, int N, int x, int y) {
	if (is_same1(paper, N, x, y)) {
		if (paper[x][y] == -1)	minus1++;
		else if (paper[x][y] == 0) zero++;
		else one++;
		return 0;
	}
	for (int i = x; i < x+N; i = i+(N/3)) {
		for (int j = y; j < y+N; j = j + (N / 3)) {
			divide_N_count(paper, N / 3, i, j);
		}
	}
}

int main() {
	//입력
	int N;
	cin >> N;

	int **paper = new int*[N];
	for (int i = 0; i < N; i++) {
		paper[i] = new int[N];
	}
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			cin >> paper[i][j];
		}
	}

	//실행
	divide_N_count(paper, N, 0, 0);

	//출력
	cout << minus1 << endl;
	cout << zero << endl;
	cout << one << endl;
}	

 

'컴퓨터 > 문제 풀기' 카테고리의 다른 글

백준 16955번 오목, 이길 수 있을까?  (0) 2019.05.20
10799번 쇠막대기  (0) 2019.05.13
2413번 비슷한 순열  (1) 2019.05.13
2309번 일곱 난쟁이  (0) 2019.05.13
백준 2688번 줄어들지 않아  (0) 2019.05.13

처음에는 안됐는데 문제는 overflow였다.

모든 걸 long long으로 바꾸니 해결됐다.

#include <iostream>

using namespace std;

int main() {
	int T;
	cin >> T;
	if (T < 1 || T>1000) {
		return 0;
	}
	int *values = new int[T];
	for (int i = 0; i < T; i++) {
		cin >> values[i];
		if (values[i] < 1 || values[i]>64) {
			return 0;
		}
	}
	for(int i = 0; i<T; i++){
		long long arr[10] = { 1,1,1,1,1,1,1,1,1,1 };
		long long n = values[i];
		
		for (long long i = 0; i < n - 1; i++) {
			for (int j = 1; j < 10; j++) {
				arr[j] = arr[j - 1] + arr[j];
			}
		}
		long long result = 0;
		for (int i = 0; i < 10; i++) {
			result += arr[i];
		}
		cout << result << endl;
	}
}

'컴퓨터 > 문제 풀기' 카테고리의 다른 글

백준 16955번 오목, 이길 수 있을까?  (0) 2019.05.20
10799번 쇠막대기  (0) 2019.05.13
2413번 비슷한 순열  (1) 2019.05.13
2309번 일곱 난쟁이  (0) 2019.05.13
백준 1780번 종이의 개수  (0) 2019.05.13

+ Recent posts