https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LsaaqDzYDFAXc&categoryId=AV5LsaaqDzYDFAXc&categoryType=CODE&problemTitle=1860&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 

 

SW Expert Academy

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

swexpertacademy.com

 

967/1000 - 뭐가 문제일깜..

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {

	int t;
	cin >> t;
	for (int i = 0; i < t; i++) {
		int n,m,k;

		cin >> n >> m >> k;

		vector<int> vec;

		int num;
		for (int x = 0; x < n; x++) {
			cin >> num;
			vec.push_back(num);
		}

		sort(vec.begin(), vec.end());

		string result = "Possible";

		long long cnt = 0;
		long long boo = 0;
		int flag = 0;
		while (!vec.empty()) {
			if (cnt == m) {
				boo += k;
				m += m;
			}

			while(!vec.empty() && vec[0] == cnt){
				if ( boo > 0) {
					vec.erase(vec.begin());
					boo--;
				}
				else {
					result = "Impossible";
					flag++;
					break;
				}
			}

			if (flag > 0) {
				break;
			}

			cnt++;
		}

		cout << "#" << i + 1 << " " << result << endl;
	}

	return 0;
}

 

- 파일로 저장해서 틀린 TC 찾기

#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>

using namespace std;

int main() {

	ofstream fout;
	fout.open("a.txt");


	ifstream fin;
	fin.open("input.txt");

	int t;
	fin >> t;
	for (int i = 0; i < t; i++) {
		int n, m, k;

		fin >> n >> m >> k;

		vector<int> vec;

		int num;
		for (int x = 0; x < n; x++) {
			fin >> num;
			vec.push_back(num);
		}

		sort(vec.begin(), vec.end());

		string result = "Possible";

		int cnt = 0;
		int boo = 0;
		int flag = 0;
		while (!vec.empty()) {
			if (cnt == m) {
				boo += k;
				m += m;
			}

			while (!vec.empty() && vec[0] == cnt) {
				if (boo > 0) {
					vec.erase(vec.begin());
					boo--;
				}
				else {
					result = "Impossible";
					flag++;
					break;
				}
			}

			if (flag > 0) {
				break;
			}

			cnt++;
		}

		fout << "#" << i + 1 << " " << result << endl;
	}

	fin.close();
	fout.close();

	return 0;
}

 

- (정답코드)

m+=m 이러면 말이 안됨, cnt!=0 && cnt%m==0 수정

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {

	int t;
	cin >> t;
	for (int i = 0; i < t; i++) {
		int n, m, k;

		cin >> n >> m >> k;

		vector<int> vec;

		int num;
		for (int x = 0; x < n; x++) {
			cin >> num;
			vec.push_back(num);
		}

		sort(vec.begin(), vec.end());

		string result = "Possible";

		int cnt = 0;
		int boo = 0;
		int flag = 0;
		while (!vec.empty()) {
			if (cnt!=0 && cnt % m==0) 
				boo += k;

			while (!vec.empty() && vec[0] == cnt) {
				if (boo > 0) {
					vec.erase(vec.begin());
					boo--;
				}
				else {
					result = "Impossible";
					flag++;
					break;
				}
			}

			if (flag > 0) {
				break;
			}

			cnt++;
		}

		cout << "#" << i + 1 << " " << result << endl;
	}

	return 0;
}

'APS > SWEA' 카테고리의 다른 글

8659.GCD c++  (0) 2021.11.19
1216. [S/W 문제해결 기본] 3일차 - 회문2  (0) 2021.11.19
12052. 부서진 타일 c++  (0) 2021.11.09
2805. 농작물 수확하기 c++  (0) 2021.11.07
1859. 백만 장자 프로젝트 C++  (0) 2021.11.07

+ Recent posts