반응형
한자리씩 바꿔가면서 둘다 같은 값을 갖는 경우에 결과 출력.
/////////////////////////////////////////////////////////////////////////////////////////////
// 기본 제공코드는 임의 수정해도 관계 없습니다. 단, 입출력 포맷 주의
// 아래 표준 입출력 예제 필요시 참고하세요.
// 표준 입력 예제
// 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을 리턴해야합니다.
}
반응형
'Algorithm' 카테고리의 다른 글
1256. [S/W 문제해결 응용] 6일차 - K번째 접미어 (0) | 2020.05.05 |
---|---|
7699. 수지의 수지 맞는 여행 (0) | 2020.05.04 |
7701. 염라대왕의 이름 정렬 (1) | 2020.05.02 |
7829. 보물왕 태혁 (0) | 2020.05.01 |
1486. 장훈이의 높은 선반 (0) | 2020.04.30 |