카테고리 없음

sw expert 나뭇잎 닌자 문제

FireStone 2019. 6. 5. 03:37

https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWrcxNbaMNwDFARG&categoryId=AWrcxNbaMNwDFARG&categoryType=CODE&&&&&&

 

SW Expert Academy

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

www.swexpertacademy.com

우선 보다시피 정답자가 없음

내가 첫번째 정답자가 되길 바라며...

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

using namespace std;
int d_num = 0;
int dif_age_min = 2000000000;
int main(int argc, char** argv) {
	int dif_age, dif_lev = 0;
	int min_age, min_lev = 0;
	int previous_num;
	int flag = 3;
	int p_num = 0;
	int dif_lev_min;
	vector<vector<int>> d;
	vector<vector<string>> answer;
	int test_num = 0;
	int num = 0;
	int first_factor,second_factor;
	char d_p;
	string str;
	
	cin >> test_num;
	cin >> num;
	
	for (previous_num = 0;previous_num < test_num;previous_num++) {
		d_num = 0;
		p_num = 0;
		d.clear();
		
		for (int j = 0;j <num;j++) {
			cin >> d_p;
			if (d_p =='D') {
				d.push_back(vector <int>());
				cin >> first_factor>>second_factor;
				d[d_num].push_back(first_factor); //그냥 cin>>d[j][second]이런식으로 하면 안됨! 벡터 오류뜸
				d[d_num].push_back(second_factor);
				d_num++;
			}
			else if (d_p = 'P') {
				cin >> first_factor;
				first_factor--;
				dif_age_min = 2000000000;
				//이때 p[fist_factor]의 스승을 찾아줘야함
				for (int i = 0;i < d_num;i++) {
					if ((d[i][1] >= d[first_factor][1]) && (d[i][0] >= d[first_factor][0])) {
						dif_age = d[i][1] - d[first_factor][1];
						dif_lev = d[i][0] - d[first_factor][0];
						if (i == first_factor)
							;
						else if (dif_age < dif_age_min) {
							min_age = i;
							flag = 1;
						}
						else if (dif_age == dif_age_min) {
							dif_lev_min = min((d[min_age][0] - d[first_factor][0]), dif_lev);
							if (dif_lev_min == dif_lev)
								min_lev = i;
							else
								min_lev = min_age;
							flag = 2;
						}
					}
					else {
						//answer.push_back(vector<string>());
						flag = 3;
					}
						
				}
				if (flag==1) {
					answer.push_back(vector<string>());
					str = to_string(min_age+1);
					answer[previous_num].push_back(str);
					p_num++;
				}
				else if(flag==2) {
					answer.push_back(vector<string>());
					str = to_string(min_lev+1);
					answer[previous_num].push_back(str);
					p_num++;
				}
				else if (flag == 3) {
					answer.push_back(vector<string>());
					answer[previous_num].push_back("NE");
					p_num++;
				}
					
			}
		}
		cout << "#" << previous_num + 1<<" ";
		for (int i = 0;i < p_num;i++)
			cout << answer[previous_num][i]<<" ";
		cout << endl;
	}

	return 0;
	
}

ㅎ ㅏ..진짜 답을 너무 잘찾아내서 소름일 정도인데 런타임 에러....

도대체 왜일까..

왜인지 아시는분 댓글로 달아주세요.. plz..

테스트 케이스만 한 5개는 만들어서 돌린것 같은데

진짜 정답이 다 제대로 나오는데...무엇이 문제인걸까..