반응형
<문제 소개>
<소스 코드>
#include <string>
#include <vector>
using namespace std;
string solution(string myString)
{
string answer = "";
for(int i = 0; i < myString.size(); i++)
{
if(myString[i] == 'a')
{
myString[i] = 'A';
}
else if(myString[i] > 'A' && myString[i] <= 'Z')
{
myString[i] = myString[i] - 'A' + 'a';
}
}
answer = myString;
return answer;
}
<풀이과정>
1. 주어진 문자열 myString의 각 문자들을 반복하며 각 경우에 맞게 변환시켜준다.
2. 문자가 'a'인 경우는 단순히 해당 문자를 'A'로 변환시켜준다.
3. 대문자들은 아스키코드로 연결되어 표현될 수 있어서 'A' 보다 크고 'Z' 보다 작거나 같다고 표현하여 대문자 'A' 가 아닌 나머지 대문자들의 범위를 구할 수 있고, 해당 범위에 들어오는 경우에는 'A' 만큼 빼주어 몇번째 알파벳인지를 찾고, 다시 'a'만큼 더해주어 소문자 'a' 에서 몇번째 떨어진 알파벳으로 변경해준다. 즉 대문자를 소문자로 변환시켜준다.
4. 모든 문자에 대해 위의 과정을 반복하고 반복이 끝나면 변환된 문자열을 answer에 담고 answer를 리턴해준다.
<코멘트>
최근에 이런 대소문자 아스키코드 변환 문제를 많이 접해서 쉽게 풀 수 있었다.
다음에는 isupper와 같은 함수를 사용해 보아야겠다.
<제출결과>