본문 바로가기

컴퓨터/알고스팟 알고리즘

알고스팟 알고리즘: URI [C++]

문제 출처: https://algospot.com/judge/problem/read/URI

 

algospot.com :: URI

URI Decoding 문제 정보 문제 URI (Uniform Resource Identifier) is a compact string used to identify or name resources on the Internet. Some examples of URI are below: http://icpc.baylor.edu.cn/ mailto:foo@bar.org ftp://127.0.0.1/pub/linux readme.txt W

algospot.com

1. 코드

#include <iostream>
#include <string>

using namespace std;

int main(void)
{
	int t;
	cin >> t;

	while (t--)
	{
		string arr;
		cin >> arr;

		for (int i = 0; i < arr.length(); i++)
		{
			if (arr[i] == '%' && arr[i + 1] == '2')
			{
				switch (arr[i + 2])
				{
				case '0':
					cout << " ";
					break;
				case '1':
					cout << "!";
					break;
				case '4':
					cout << "$";
					break;
				case '5':
					cout << "%";
					break;
				case '8':
					cout << "(";
					break;
				case '9':
					cout << ")";
					break;
				case 'a':
					cout << "*";
					break;
				default:
					break;
				}
				i += 2;
			}
			else cout << arr[i];
		}
		cout << endl;
	}
}

(실행)

2. 풀이

문자열을 입력받고 문자열 요소들 중 %를 인식하고 다음 글자가 2를 인식한다면 문제에 나와있는 표중 해당되는 글자가 포함된다면 해당 표에 표시된 글자를 출력하고 3글자 i의 값을 증가시켜서 이미 3글자를 읽은 것으로 처리한다. 만약 %를 인식하지 못했다면 해당 문자열의 요소를 출력한다.

int t;
cin >> t;

while (t--)

우선은 테스트 회수를 입력하고 그 횟수만큼 반복한다.

if (arr[i] == '%' && arr[i + 1] == '2')
{
	switch (arr[i + 2])
	{
	case '0':
		cout << " ";
		break;
	case '1':
		cout << "!";
		break;
	case '4':
		cout << "$";
		break;
	case '5':
		cout << "%";
		break;
	case '8':
		cout << "(";
		break;
	case '9':
		cout << ")";
		break;
	case 'a':
		cout << "*";
		break;
	default:
		break;
	}
	i += 2;
}

문자열 중 표에 해당하는 3글자가 존재한다면 표에 명시된 글자를 출력한 뒤 i의 값을 증가시켜서 읽은 것 처리한다.

			else cout << arr[i];
		}
		cout << endl;
	}
}

만약 %가 인식안됬다면 바로 출력한다. 문자열이 전부 출력되면 줄바꿈을 해준다.