Algorithms/PS

[PS] 백준 #23746. 문자열 압축 해제

퐁키조아 2021. 12. 28. 13:42

문제

특정 소문자 문자열 패턴을 대문자 한 글자로 압축하는 프로그램 SPC(String Pattern Compressor)가 있다.

예를 들어, 다음과 같은 방법으로 압축하는 경우, “”는 “”로 압축된다.

소문자 문자열 패턴 대문자

압축 프로그램과 압축된 문자열이 주어지면, 압축되기 전 문자열의 일부를 출력하는 프로그램을 작성하시오.

 

나의 풀이

이 문제는 나의 C++ 코드 작성 습관을 점검하기 위해서 작성하였다. 

  • 자주 사용하는 헤더 파일들을 미리 include 해두었다.
  • sync_with_stdio, cin.tie, cout.tie 등을 이용해서 입출력 속도를 높였다.
  • 반복문은 while(n--), for (int i=0; i<n; i++) 두 가지 방식을 모두 사용한다.
  • C++ 에서는 string에 + 연산이 가능하다. (C, C++, JAVA를 모두 골고루 다루다보니 가끔 헷갈릴때가 있다.) 
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
#include <vector>
#include <set>
#include <list>
#include <stack>
#include <queue>
#include <algorithm>

using namespace std;

int main() {
	std::ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

	int n;
	cin >> n;
	string codeTable[26];
	while (n--) {
		string origin;
		char compress;
		cin >> origin >> compress;

		codeTable[compress - 'A'] = origin;
	}

	string code;
	cin >> code;
	int s, e;
	cin >> s >> e;

	string result;
	for (int i = 0; i < code.length(); i++) {
		result += codeTable[code[i] - 'A'];
	}
	for (int i = s - 1; i < e; i++) {
		cout << result[i];
	}
}