[Coding] SWEA 1859, 1209주식 거래 C++

문채영·2023년 5월 13일
0

💻 1859

주식거래시 최대 이익 남기는 알고리즘

#include<iostream>
using namespace std;

int m[1000001];


int main() {
	int T;
	cin >> T;

	int n;
	int max;

	for (int i = 0; i < T; i++) {
		long long sum = 0;
		cin >> n;
		for (int j = 0; j < n; j++) {
			cin >> m[j];//금액 입력 받음
		}
		max = m[n - 1];//max값을 마지막날 금액으로 설정
		//지금까지 구매한 가격 중 제일 비싼 가격
		for (int k = n - 2; k >= 0; k--) {
			//뒤에서 두 번째 날 부터 시작해서
			if (m[k] > max)
			{
				max = m[k];//현재 도는 값이 마지막날(max)값보다 크면 max변경
			}
			else {//현재보다 max가 크면
				sum += max - m[k];
				//k일에 주식을 팔 때 얻을 수 있는 이익을 구함
				//이익+=현재 최고가 max에서 k일의 가격을 뺌
			}
		}
		cout << "#" << i + 1 << " " << sum << "\n";
	}
}
#include<iostream>
#include<vector>
using namespace std;


int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
	int T;
	cin >> T;

	for (int i = 1; i <= T; i++) {
		int N;
		cin >> N;

		vector<int>A;
		A.resize(N);

		for (int i = 0; i < N; i++) {
			cin >> A[i];
		}

		int max = A[N - 1];
		long long sum = 0;
		for (int i = N - 2; i >= 0; i--) {
			if (A[i] > max) {
				max = A[i];
			}
			else {
				sum += max - A[i];
			}
		}
		cout <<"#"<<i<<" "<<sum << "\n";
	}
    
}

코드 출처: https://ehdtn1219.tistory.com/45

💻1209

행렬의 행, 열, 대각선 별 합 구하기

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

vector<int>row(100, 0);
vector<int>col(100, 0);
vector<int>cross(2, 0);
vector<vector<int>>A(100, vector<int>(100));
int main() {

	int T = 10;
	int N;
	for (int test_case = 1; test_case <= T; test_case++) {
		cin >> N;

		//행렬 입력받기
		for (int i = 0; i < 100; i++) {
			for (int j = 0; j < 100; j++) {
				cin >> A[i][j];
			}
		}

		//행 합 구하기
		for (int i = 0; i < 100; i++) {
			int rowsum = 0;
			for (int j = 0; j < 100; j++) {
				rowsum += A[i][j];
			}
			row[i] = rowsum;
		}

		//열 합 구하기
		for (int i = 0; i < 100; i++) {
			int colsum = 0;
			for (int j = 0; j < 100; j++) {
				colsum += A[j][i];
			}
			col[i] = colsum;
		}

		//오른쪽 대각선 구하기
		int rightcross = 0;
		for (int i = 0; i < 100; i++) {
			rightcross += A[i][i];
		}
		cross[0] = rightcross;

		//왼쪽 대각선 구하기
		int leftcross = 0;

		int addrow = 0;
		int addcol = 99;
		for (int i = 0; i < 100; i++) {
			leftcross += A[addrow][addcol];
			addrow++;
			addcol--;
		}
		cross[1] = leftcross;

		//행, 열, 대각선합 벡터를 오름차순 정렬하기
		sort(col.begin(), col.end());
		sort(row.begin(), row.end());
		sort(cross.begin(), cross.end());

		int colmax = col[99];
		int rowmax = row[99];
		int crossmax = cross[1];

		//제일 큰 값 구하기
		int ans = max(colmax, max(rowmax, crossmax));



		cout << "#" << test_case << " ";
		cout << ans << "\n";

		//cout << "행: " << colmax << " 열: " << rowmax << " 대각선: " << crossmax << "\n";
	}
}

0개의 댓글