https://school.programmers.co.kr/learn/courses/30/lessons/12951
*초기 코드
#include <string>
#include <vector>
#include <cctype>
using namespace std;
string solution(string s)
{
string answer = "";
bool capitalize = true;
for (char ch : s)
{
if (ch == ' ')
{
answer += ' ';
capitalize = true;
}
else
{
if (capitalize)
{
if (!isalpha(ch))
{
answer += ch;
capitalize = false;
}
else
{
answer += toupper(ch);
capitalize = false;
}
}
else
{
answer += tolower(ch);
}
}
}
return answer;
}
*타인 풀이 참고 코드
#include <string>
#include <vector>
#include <cctype>
using namespace std;
string solution(string s)
{
string answer = "";
answer += toupper(s[0]);
for (int i = 1; i < s.length(); ++i)
{
answer[i - 1] == ' ' ? answer += toupper(s[i]) : answer += tolower(s[i]);
}
return answer;
}
처음에 풀었을 때, 첫 번째 글자가 숫자인지 알파벳인지 판단하고 현재 글자가 공백인지 판단하는 작업을 조건문으로 계속 확인하도록 하여 많은 분기문으로 가독성이 좋지 않게 문제를 풀었다.
다른 사람 풀이를 보던 중, 첫 번째 글자가 공백인지 혹은 숫자인지 확인을 하지 않고 그냥 answer 문자열에 toupper와 tolower 메서드를 사용해 문자를 추가하여 푼 것을 보고 이게 왜 되는거지..? 라는 생각을 했다.
int toupper(int c);
toupper 의 함수 원형을 예시로 살펴보면, char를 매개변수로 전달해 char 타입을 반환받는다고 생각했었는데 내부적으로는 int로 처리하는 것을 확인할 수 있었다.
toupper 는 C스타일 함수로, 기본적으로 ASCII 문자 안에서만 안전하게 변환한다. 그러므로 ASCII 문자가 아닌 다른 문자 즉, 알파벳이 아닌 문자(공백, 숫자, 특수 문자)는 입력 값 그대로 다시 반환하게 되어있다.
이로 인해 공백이든 앞에 숫자든 상관없이 앞서 answer에 저장한 문자가 공백이라면 숫자이든 문자이든 상관없이 toupper 함수를 사용하면 문장의 첫 글자는 무조건 대문자로 변환되거나 만약 문장의 첫 글자가 숫자라면 그 숫자 그대로 answer에 저장된다.
'공부 > Code Cata' 카테고리의 다른 글
멀리 뛰기 / 피보나치 수열 활용 (0) | 2025.02.05 |
---|---|
N개의 최소 공배수 (0) | 2025.02.04 |
최대값과 최솟값 (0) | 2025.01.27 |
개인정보 수집 유효기간 (0) | 2025.01.22 |
햄버거 만들기 (0) | 2025.01.20 |