(C++) 백준 2204 - 도비의 난독증

코딩너구리·2025년 10월 14일

코딩 문제 풀이

목록 보기
31/266

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

문제

> 꿍은 도비에게 어떤 단어들을 대소문자 구분없이 사전순으로 가장 앞서는 단어를 맞추면 양말을 주어 자유를 얻게해준다.
> 하지만 인성이 나빠 대소문자를 마구 섞었다. 도비에게 자유를 주자.

접근

입력받은 문자열을 toupper나 tolower로 대문자 혹은 소문자로 정렬한 후 비교하고 사전순으로 빠른, 즉 , 더 작은 문자열을 출력한다.

문제해결

> 문자열을 대문자로 정렬해 비교하는걸 선택했고 이를 매번 입력마다 해줘야해서 함수로 정의 해줬다. 처음으로 들어온 문자열을 따로 입력받아 비교대상으로 삼고 다음 문자열부터 각각 Toupper 함수를 돌려 나온 문자열과 비교해 더 작은값을 결과값 변수에 갱신시켜준다. 반복이 끝나면 출력한다.

코드

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

string Toupper(string s)
{
	for (int i = 0; i < s.length(); i++)
	{
		s[i] = toupper(s[i]);
	}
	return s;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);

	int n;	
	while (cin >> n && n != 0)
	{
		string str2;
		string result;

		cin >> result;
		for (int i = 1; i < n; i++)
		{
			cin >> str2;
			result = Toupper(result) < Toupper(str2) ? result : str2;
		}
		cout << result << '\n';
	}
}

후기

toupper나 tolower로 변환해서 단순히 비교해서 해결하도록 5분만에 끝냈는데 출력해보니 변환된 문자열이 나왔다. 그래서 이를 해결하기위해 여러가지 방법을 생각하느라 고생을 헀다.
결국 함수로 정의해 변환값을 리턴해서 원본값은 변환하지않고 연산하도록 헀다. 생각한대로 잘 나왔다.

0개의 댓글