본문 바로가기

Algorithm

4366. 정식이의 은행업무

반응형

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

 

SW Expert Academy

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

swexpertacademy.com

 

한자리씩 바꿔가면서 둘다 같은 값을 갖는 경우에 결과 출력.

 

/////////////////////////////////////////////////////////////////////////////////////////////
// 기본 제공코드는 임의 수정해도 관계 없습니다. 단, 입출력 포맷 주의
// 아래 표준 입출력 예제 필요시 참고하세요.
// 표준 입력 예제
// int a;
// float b, c;
// double d, e, f;
// char g;
// char var[256];
// long long AB;
// cin >> a;                            // int 변수 1개 입력받는 예제
// cin >> b >> c;                       // float 변수 2개 입력받는 예제 
// cin >> d >> e >> f;                  // double 변수 3개 입력받는 예제
// cin >> g;                            // char 변수 1개 입력받는 예제
// cin >> var;                          // 문자열 1개 입력받는 예제
// cin >> AB;                           // long long 변수 1개 입력받는 예제
/////////////////////////////////////////////////////////////////////////////////////////////
// 표준 출력 예제
// int a = 0;                            
// float b = 1.0, c = 2.0;               
// double d = 3.0, e = 0.0; f = 1.0;
// char g = 'b';
// char var[256] = "ABCDEFG";
// long long AB = 12345678901234567L;
// cout << a;                           // int 변수 1개 출력하는 예제
// cout << b << " " << c;               // float 변수 2개 출력하는 예제
// cout << d << " " << e << " " << f;   // double 변수 3개 출력하는 예제
// cout << g;                           // char 변수 1개 출력하는 예제
// cout << var;                         // 문자열 1개 출력하는 예제
// cout << AB;                          // long long 변수 1개 출력하는 예제
/////////////////////////////////////////////////////////////////////////////////////////////

#include<iostream>
#include<string>
#include<map>
#include<cmath>
using namespace std;

string str1;
string str2;


map<int, bool> m;


void changetwo(int idx)
{
	if (str1[idx] == '0')
	{
		str1[idx] = '1';
	}
	else
	{
		str1[idx] = '0';
	}

	int x = 1;
	int two = 0;
	for (int i = str1.size() - 1; i >= 0; i--)
	{
		two += x * (str1[i] - '0');
		x *= 2;
	}

	if (!m[two])
	{
		m[two] = true;
	}
}


int changethree(int idx)
{
	int x = 1;
	int three = 0;

	if (str2[idx] == '0')
	{
		str2[idx] = '1';
		x = 1;
		three = 0;
		for (int j = str2.size() - 1; j >= 0; j--)
		{
			three += x * (str2[j] - '0');
			x *= 3;
		}

		if (!m[three])
		{
			m[three] = true;
		}
		else
		{
			return three;
		}



		str2[idx] = '2';
		x = 1;
		three = 0;
		for (int j = str2.size() - 1; j >= 0; j--)
		{
			three += x * (str2[j] - '0');
			x *= 3;
		}

		if (!m[three])
		{
			m[three] = true;
		}
		else
		{
			return three;
		}
	}
	else if (str2[idx] == '1')
	{
		if (idx != 0)
		{
			str2[idx] = '0';
			x = 1;
			three = 0;
			for (int j = str2.size() - 1; j >= 0; j--)
			{
				three += x * (str2[j] - '0');
				x *= 3;
			}

			if (!m[three])
			{
				m[three] = true;
			}
			else
			{
				return three;
			}
		}

		str2[idx] = '2';
		x = 1;
		three = 0;
		for (int j = str2.size() - 1; j >= 0; j--)
		{
			three += x * (str2[j] - '0');
			x *= 3;
		}

		if (!m[three])
		{
			m[three] = true;
		}
		else
		{
			return three;
		}
	}
	else if (str2[idx] == '2')
	{
		if (idx != 0)
		{
			str2[idx] = '0';
			x = 1;
			three = 0;
			for (int j = str2.size() - 1; j >= 0; j--)
			{
				three += x * (str2[j] - '0');
				x *= 3;
			}

			if (!m[three])
			{
				m[three] = true;
			}
			else
			{
				return three;
			}
		}

		str2[idx] = '1';
		x = 1;
		three = 0;
		for (int j = str2.size() - 1; j >= 0; j--)
		{
			three += x * (str2[j] - '0');
			x *= 3;
		}

		if (!m[three])
		{
			m[three] = true;
		}
		else
		{
			return three;
		}
	}

	return 0;
}

int main(int argc, char** argv)
{
	int test_case;
	int T;
	
	cin >> T;
	/*
	   여러 개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
	*/
	for (test_case = 1; test_case <= T; ++test_case)
	{
		cin >> str1 >> str2;
		m.clear();
		
		
		string temp1;

		for (int i = 1; i < str1.size(); i++)
		{
			temp1 = str1;
			changetwo(i);
			str1 = temp1;
		}

		string temp2;
		int result;

		for (int i = 0; i < str2.size(); i++)
		{
			temp2 = str2;
			result = changethree(i);
			if (!result)
			{
				str2 = temp2;
			}
			else
			{
				break;
			}
		}

		cout << "#" << test_case << " " << result << endl;
	}
	return 0;//정상종료시 반드시 0을 리턴해야합니다.
}
반응형