[프로그래머스][C++] 이상한 문자 만들기
이상한 문자 만들기
문제 링크
분석
문자열의 공백을 기준으로 짝수와 홀수르 구분해 각 문자를 대문자나 홀수로 변환하는 문제입니다.
문자열에서 공백의 경우 단어의 위치를 초기화해야 하고, 공백을 그대로 문자열에 유지해야합니다.
짝수 번째는 대문자 홀수 번째는 소문자로 변환해야합니다.
이때 아스키 코드의 알파벳이 있는 값을 이해하고 푸는 방법과 대/소문자를 변환해주는 함수를 사용하는 방법이 있습니다.
풀이
아스키 코드에서 대문자와 소문자의 차이를 이용한 방법입니다.
입력된 문자열에서 대문자와 소문자를 변환한 뒤 반환값을 저장할 변수에 대입하고 반환합니다.
#include <string>
std::string solution(std::string s) {
std::string answer = "";
int index = 0;
for (int i = 0; i < s.size(); ++i)
{
if (s[i] == ' ')
{
index = 0;
answer += ' ';
continue;
}
if (index % 2 == 0)
{
if ('a' <= s[i])
{
s[i] = static_cast<int>(s[i]) - 32;
}
}
else
{
if ('a' > s[i])
{
s[i] = static_cast<int>(s[i]) + 32;
}
}
++index;
}
answer = s;
return answer;
}
std::toupper
함수와 std::tolower
함수를 사용한 방법입니다.
각 함수에서 반환된 값을 answer
에 넣어줍니다.
#include <string>
std::string solution(std::string s) {
std::string answer = "";
int index = 0;
for (int i = 0; i < s.size(); ++i)
{
if (s[i] == ' ')
{
index = 0;
answer += ' ';
continue;
}
if (index % 2 == 0)
{
answer += std::toupper(s[i]);
}
else
{
answer += std::tolower(s[i]);
}
++index;
}
return answer;
}
성능 요약
직접 대문자와 소문자를 변환한 성능입니다.
테스트 1 〉 통과 (0.01ms, 4.15MB)
테스트 2 〉 통과 (0.01ms, 4.04MB)
테스트 3 〉 통과 (0.01ms, 4.15MB)
테스트 4 〉 통과 (0.01ms, 4.2MB)
테스트 5 〉 통과 (0.01ms, 4.22MB)
테스트 6 〉 통과 (0.01ms, 4.17MB)
테스트 7 〉 통과 (0.01ms, 4.22MB)
테스트 8 〉 통과 (0.01ms, 4.14MB)
테스트 9 〉 통과 (0.01ms, 4.21MB)
테스트 10 〉 통과 (0.01ms, 4.22MB)
테스트 11 〉 통과 (0.01ms, 4.21MB)
테스트 12 〉 통과 (0.01ms, 4.21MB)
테스트 13 〉 통과 (0.01ms, 4.2MB)
테스트 14 〉 통과 (0.01ms, 4.21MB)
테스트 15 〉 통과 (0.01ms, 4.17MB)
테스트 16 〉 통과 (0.01ms, 4.21MB)
함수를 사용한 성능입니다.
테스트 1 〉 통과 (0.01ms, 4.13MB)
테스트 2 〉 통과 (0.01ms, 3.67MB)
테스트 3 〉 통과 (0.01ms, 3.68MB)
테스트 4 〉 통과 (0.01ms, 4.02MB)
테스트 5 〉 통과 (0.01ms, 4.2MB)
테스트 6 〉 통과 (0.01ms, 4.21MB)
테스트 7 〉 통과 (0.01ms, 4.2MB)
테스트 8 〉 통과 (0.01ms, 4.21MB)
테스트 9 〉 통과 (0.01ms, 3.58MB)
테스트 10 〉 통과 (0.02ms, 4.21MB)
테스트 11 〉 통과 (0.01ms, 4.2MB)
테스트 12 〉 통과 (0.01ms, 3.71MB)
테스트 13 〉 통과 (0.01ms, 3.68MB)
테스트 14 〉 통과 (0.01ms, 4.14MB)
테스트 15 〉 통과 (0.01ms, 4.17MB)
테스트 16 〉 통과 (0.01ms, 4.24MB)
댓글남기기