swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Pq-OKAVYDFAUq&categoryId=AV5Pq-OKAVYDFAUq&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

구현력을 올리기 위해 쉬운 문제부터 풀고 있다.

배열을 90도, 180도, 270도 회전해서 출력해주면 된다.

 

나는 90, 180, 270을 한 행에 전부 써주고 출력하고 다시 써주고 출력하고를 반복했다.

 

#include <bits/stdc++.h>
using namespace std;

string s;
int ar[8][8], n;

string f1(int cur) {
	string ret;

	for (int i = n - 1; i >= 0; --i) {
		ret += to_string(ar[i][cur]);
	}

	return ret;
}

string f2(int cur) {
	string ret;
	cur = n - cur - 1;
	for (int i = n - 1; i >= 0; --i) {
		ret += to_string(ar[cur][i]);
	}

	return ret;
}

string f3(int cur) {
	string ret;
	cur = n - cur - 1;
	for (int i = 0; i < n; ++i) {
		ret += to_string(ar[i][cur]);
	}

	return ret;
}

int main() {
	//ios::sync_with_stdio(false); cin.tie(0);

	int TC;
	cin >> TC;

	for (int tc = 1; tc <= TC; ++tc) {
		cin >> n;

		for (int i = 0; i < n; ++i)
			for (int j = 0; j < n; ++j)
				cin >> ar[i][j];

		cout << '#' << tc << '\n';
		for (int j = 0; j < n; ++j) {
			s = "";
			s += f1(j);
			s += ' ';
			s += f2(j);
			s += ' ';
			s += f3(j);
			cout << s << '\n';
		}
		
	}

	return 0;
}

 

f1은 90도 회전, f2는 180도 회전, f3은 270도 회전 함수이다. C++에서는 문자열 합치기가 굉장히 쉬워서 쉽게 풀었던 것 같다.

'SWEA' 카테고리의 다른 글

SWEA 1974 스도쿠 검증  (0) 2020.10.29
SWEA 1859 백만 장자 프로젝트  (0) 2020.10.28

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Psz16AYEDFAUq&categoryId=AV5Psz16AYEDFAUq&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

9x9 판이 주어지면 가로, 세로, 3x3 구간에 각 숫자들이 1 ~ 9까지 들어있는지 확인하는 문제다.

깡 구현 문제인데 가로, 세로는 쉽게 구현할 수 있고 3x3 사이즈도 조금만 생각해보면 쉽게 풀린다.

 

#include <bits/stdc++.h>
using namespace std;

int ar[9][9];
bool vis[9];

bool chk() { //가로
	int sum = 0;
	for (int i = 0; i < 9; ++i) {
		sum = 0;
		for (int j = 0; j < 9; ++j) {
			sum += ar[i][j];
		}
		if (sum != 45) return false;
	}
	return true;
}

bool chk2() { //세로
	int sum = 0;
	for (int i = 0; i < 9; ++i) {
		sum = 0;
		for (int j = 0; j < 9; ++j) {
			sum += ar[j][i];
		}
		if (sum != 45) return false;
	}
	return true;
}

bool chk3(int x, int y) { //3x3
	fill(vis, vis + 9, false);
	for (int i = x; i < x + 3; ++i) {
		for (int j = y; j < y + 3; ++j) {
			if (vis[ar[i][j] - 1]) return false;
			vis[ar[i][j] - 1] = true;
		}
	}
	return true;
}

int main() {
	//ios::sync_with_stdio(false); cin.tie(0);

	int TC;
	cin >> TC;
	
	for (int tc = 1; tc <= TC; ++tc) {
		for (int i = 0; i < 9; ++i) {
			for (int j = 0; j < 9; ++j) {
				cin >> ar[i][j];
			}
		}

		bool end = false;
		if (!chk()) {
			cout << '#' << tc << ' ' << 0 << '\n'; continue;
		}
		if (!chk2()) {
			cout << '#' << tc << ' ' << 0 << '\n'; continue;
		}
		for (int i = 0; i <= 6; i += 3) {
			for (int j = 0; j <= 6; j += 3) {
				if (!chk3(i, j)) {
					end = true; break;
				}
			}
			if (end) break;
		}
		if (end) {
			cout << '#' << tc << ' ' << 0 << '\n'; continue;
		}
		cout << '#' << tc << ' ' << 1 << '\n';

	}

	return 0;
}

 

가로와 세로 부분은 각 줄의 합이 45가 아니라면 잘못된 스도쿠니까 0을 출력시켜주고 chk3 함수에서 3x3은

각 숫자들이 방문했는지 vis 배열을 통해서 처리해줬다.

'SWEA' 카테고리의 다른 글

SWEA 숫자 배열 회전  (0) 2020.10.30
SWEA 1859 백만 장자 프로젝트  (0) 2020.10.28

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LrsUaDxcDFAXc&categoryId=AV5LrsUaDxcDFAXc&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 


25년 간의 수행 끝에 원재는 미래를 보는 능력을 갖게 되었다. 이 능력으로 원재는 사재기를 하려고 한다.

다만 당국의 감시가 심해 한 번에 많은 양을 사재기할 수 없다.

다음과 같은 조건 하에서 사재기를 하여 최대한의 이득을 얻도록 도와주자.

    1. 원재는 연속된 N일 동안의 물건의 매매가를 예측하여 알고 있다.
    2. 당국의 감시망에 걸리지 않기 위해 하루에 최대 1만큼 구입할 수 있다.
    3. 판매는 얼마든지 할 수 있다.

예를 들어 3일 동안의 매매가가 1, 2, 3 이라면 처음 두 날에 원료를 구매하여 마지막 날에 팔면 3의 이익을 얻을 수 있다.

 


문제를 딱 보자마자 '아 이건 그리디다' 하고 생각해서 최대한 부분적인 문제를 해결하려고 접근했다.

 

  • 뒷 원소부터 접근해 더 큰 값이 나올때까지 그 차를 결괏값에 더해준다
  • 더 큰 원소를 찾았다면 그 큰 값으로 갱신
  • 모든 원소를 순회하고 종료

그리디 문제 중에서는 쉬운 편이였던 것 같다.

 

 

#include <bits/stdc++.h>
using namespace std;
#define ll long long

vector<ll> ar;

int main() {
	ios::sync_with_stdio(false); cin.tie(0);

	int tc, n;
	cin >> tc;

	for (int c = 1; c <= tc; c++) {
		ll sum = 0, maxVal = 0;
		cin >> n;
		ar.resize(n);
		for (int i = 0; i < n; i++) cin >> ar[i];

		maxVal = ar.back();
		for (int i = n - 2; i >= 0; i--) {
			if (ar[i] > maxVal) {
				maxVal = ar[i];
			}
			else {
				sum += maxVal - ar[i];
			}
		}

		cout << "#" << c << ' ' << sum << '\n';
	}

	return 0;
}

 

'SWEA' 카테고리의 다른 글

SWEA 숫자 배열 회전  (0) 2020.10.30
SWEA 1974 스도쿠 검증  (0) 2020.10.29

+ Recent posts