PS (C, C++)

[백준/C++] 31859 SMUPC NAME

최연재 2024. 6. 23. 09:52

https://www.acmicpc.net/problem/31859

 

코드

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

int main()
{
    ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
    
	int n;
	string s, result = "";
	bool alpha[26] = { false, };
	cin >> n >> s;

	for (int i = 0; i < s.length(); i++)
	{
		if (!alpha[s[i] - 'a'])
		{
			result += s[i];
			alpha[s[i] - 'a'] = true;
		}
	}

	result += to_string(s.length() - result.length() + 4);
	result = to_string(n + 1906) + result;
	reverse(result.begin(), result.end());
	result = "smupc_" + result;
	cout << result;
	return 0;
}

 

설명 

출전 등록 번호 n 과 영어 이름 s를 입력받고 1~5번 과정을 그대로 구현하면 된다. 결과를 저장할 문자열은 result 이다.

 

1번을 위해서 반복문을 돌면서 등장하지 않은 알파벳이 등장할 때마다 result에 덧붙이고, 등장하였음을 배열에 표시한다. 2번에서는 버려진 알파벳의 개수에 4를 더한 값을 result 뒤에 붙이면 된다. s의 길이에서 result의 길이를 뺀 값이 곧 버려진 알파벳 개수이니 이를 이용한다. 3번은 출전 등록 번호에 1906을 더하고 이 값을 result 앞에 붙이면 된다. 4번에서 문자열을 뒤집고 5번에서 문자열 앞에 "smupc_"를 붙인다.

 

result를 출력한다.

 

느낀 점

해당 문제는 제4회 숙명여자대학교 프로그래밍 경진대회 SMUPC의 A번 문제로, 내가 출제한 문제다. 첫 출제이고 대회 총괄이었던 터라 가장 쉬운 문제 2개를 만들었는데, 정말 빠르게 구상했다.

 

지금까지 진행된 1~3회 SMUPC의 A번은 모두 SMUPC라는 문자열을 이용한 구현 문제였기 때문에 문자열을 이용한 문제를 만들었다. 1906(숙대 창립년도)와 4(제4회), " smupc_"를 포함해서 기본적인 문자열 처리를 최대한 넣었다.

 

문제에서 요구하는 처리가 조금 많아서인지 내 예상보다 높은 티어를 받았다.