본문 바로가기

코딩/알고리즘

마이다스 18년 대회 5번


삼항 연산자가 얽혀있는 


1 != 2 ? 3 > 4 ? 5 >= 6 ? 7 : 8 == 9 ? 10 : 11 : 12 : 13


와 같은 식의 결과값을 출력하는 문제


#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
#include <vector>
#include <string>
#include <utility>
#include <algorithm>
#include <stack>
#include <queue>
#include <functional>
#include <stdlib.h>

using namespace std;

class Node {
public :
	char isValue;
	int value = 'n';
	Node* left;
	Node* right;
	Node* parent;
};

pair<char, int> nodes[10001]; // f, t, v
int isNode[10001];

string a;
	
char colone = ':';
char quest = '?';

int main() {
	//getline(cin, a);
	Node* head = new Node();
	Node* now = head;
	int tempInt;

	while(cin.eof() == false) {
		cin >> a;

		//cout << a << endl;


		if (a == "!=") { //!=

			int value1 = now->value;
			cin >> tempInt;
			if (value1 != tempInt) now->isValue = 't';
			else now->isValue = 'f';
		}
		else if (a== "==") { //==

			int value1 = now->value;
			cin >> tempInt;
			if (value1 == tempInt) now->isValue = 't';
			else now->isValue = 'f';
		}
		else if (a == "<=") {

			int value1 = now->value;
			cin >> tempInt;
			if (value1 <= tempInt) now->isValue = 't';
			else now->isValue = 'f';
		}
		else if (a == "<" ){ // <

			int value1 = now->value;
			cin >> tempInt;
			if (value1 < tempInt) now->isValue = 't';
			else now->isValue = 'f';
		}
		else if (a == ">=") {

			int value1 = now->value;
			cin >> tempInt;
			if (value1 >= tempInt) now->isValue = 't';
			else now->isValue = 'f';
		}
		else if (a == ">") {

			int value1 = now->value;
			cin >> tempInt;
			if (value1 > tempInt) now->isValue = 't';
			else now->isValue = 'f';
		}
		else if (a == ":") {

			Node* temp = now;
			while (true) {
				if (temp->isValue != 'v' && temp->right == NULL) {

					temp->right = new Node();
					temp->right->parent = temp;
					now = temp->right;
					break;
				}
				else {
					temp = temp->parent;
				}
			}
		}
		else if (a == "?") {

			now->left = new Node();
			now->left->parent = now;
			now = now->left;
		}
		else { // value

			now->isValue = 'v';
			now->value = stoi(a);
		}


	}

	Node* temp = head;
	while (true) {
		if (temp->isValue == 'v') {
			cout << temp->value << endl;
			break;
		}
		else {
			if (temp->isValue == 'f') {
				temp = temp->right;
			}
			else {
				temp = temp->left;
			}
		}
	}



	return 0;
}








'코딩 > 알고리즘' 카테고리의 다른 글

백준 2618 경찰차  (0) 2018.05.18
백준 13325 이진 트리  (0) 2018.05.15
마이다스 18년 대회 4번  (0) 2018.05.12
마이다스 18년 대회 3번  (0) 2018.05.12
마이다스 18년 대회 1번  (0) 2018.05.12