[프로그래머스/C++] ㅡ LV1 - 이상한 문자 만들기
2021. 3. 27. 15:43ㆍ필요/코딩테스트(프로그래머스)
문제
programmers.co.kr/learn/courses/30/lessons/12930
풀이
#include <string>
#include <vector>
using namespace std;
string solution(string s) {
string answer = "";
bool ifEven = true; // 짝수인 경우
for (int i=0; i<s.size(); i++) {
if(s[i]!=' ') { // 공백이 아닌 경우
if (s[i] < 'a') { // 대문자인 경우
if (ifEven) {
answer+=s[i];
}
else {
answer+=s[i]+32;
}
}
else { // 소문자인 경우
if (ifEven) {
answer+=s[i]-32;
}
else {
answer+=s[i];
}
}
ifEven=!ifEven;
}
else { // 공백인 경우
answer+=s[i];
ifEven = true;
}
}
return answer;
}
풀이
문제에서 말해주지 않은 것이 있다.
예제로는 소문자만 있지만, Testcase에는 대문자도 동시에 나타난다.
따라서 if문을 한번 더 사용해줘야한다.
이때 지난번 문제인 시저암호 문제를 해결한 방법과 동일한 방식을 사용했다.
문제에서 나눠야하는 케이스는
1. 공백
2. 소문자
3. 대문자
이며 2, 3에서 각각의 단어안에서 숫자를 세어 짝수->대문자, 홀수->소문자로 변환해야한다.
숫자를 세는 것이 불필요하다 생각이 들어 bool 변수인 ifEven을 사용했다.
그리고 단어안에서 다음 문자로 넘어갈 때 ifEven = !ifEven 을 사용해 true->false, false->true로 변환해주었다.
또한 공백시 ifEven의 값을 초기화하는 방법을 사용했는데, 공백이 연속으로 나오는 경우에도 대비할 수 있다.
'필요 > 코딩테스트(프로그래머스)' 카테고리의 다른 글
[프로그래머스/C++] ㅡ LV1 - 정수 제곱근 판별 (0) | 2021.04.03 |
---|---|
[프로그래머스/C++] ㅡ LV1 - 정수 내림차순으로 배치하기 (0) | 2021.03.27 |
[프로그래머스/C++] ㅡ LV1 - 시저암호 (0) | 2021.03.27 |
[프로그래머스/C++] ㅡ LV1 - 수박수박수박수박수박수? (0) | 2021.03.24 |
[프로그래머스/C++] ㅡ LV1 - 서울에서 김서방 찾기 (0) | 2021.03.19 |