1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
#include <string>
#include <vector>
using namespace std;
string solution(string s) {
string answer = "";
string strTmp = "";
for(int i = 0 ; i < s.size() ; i++)
{
if(isspace(s[i]))
{
for(int j = 0 ; j < strTmp.size() ; j++)
{
if ((j % 2) == 0 && islower(strTmp[j]))
strTmp[j] = toupper(strTmp[j]);
else if((j % 2) != 0 && isupper(strTmp[j]))
strTmp[j] = tolower(strTmp[j]);
}
answer += strTmp;
answer += " ";
strTmp.clear();
}
else
strTmp += s[i];
if(i == s.size()-1)
{
for(int j = 0 ; j < strTmp.size() ; j++)
{
if ((j % 2) == 0 && islower(strTmp[j]))
strTmp[j] = toupper(strTmp[j]);
else if((j % 2) != 0 && isupper(strTmp[j]))
strTmp[j] = tolower(strTmp[j]);
}
answer += strTmp;
strTmp.clear();
}
}
return answer;
}
|
의사코드
1. 공백이 나올때까지 문자열을 검사하며 수집한다.
2. 공백이 나오면 문자열을 저장하고 사이즈를 측정해 % 2 나머지가 0인것을 대문자로 변환한다.
3. 문자열이 대소문자 섞여서 나올 수 있기때문에 소문자인지 대문자인지 검사한 후 변환한다.
4. 정렬되면 정답 배열에 집어 넣는다.
// 수정 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#include <string>
#include <vector>
using namespace std;
string solution(string s)
{
string answer = "";
//문장의 시작을 홀수로 만듬
int oddeven = 1;
for (int i = 0; i < s.size(); i++)
{
if (isspace(s[i]))
{
answer += " ";
//공백인 경우 짝수부터 문장 시작
oddeven = 1;
continue;
}
if (oddeven == 1 && islower(s[i]))
{
answer += toupper(s[i]);
oddeven--;
continue;
}
else if (oddeven == 0 && isupper(s[i]))
{
answer += tolower(s[i]);
oddeven++;
continue;
}
answer += s[i];
//현재 문장의 홀짝 구분
oddeven = (oddeven == 0) ? 1 : 0;
}
return answer;
}
|
if문과 for문이 너무 많이 들어가서 수정.
만약 isupper, toupper 같은 함수를 사용할 수 없다면
ascii 코드를 이용해 대소문자 확인 후 변경해주는식으로 코드를 짤 수 있다.
'코딩테스트 연습' 카테고리의 다른 글
코딩테스트 - 자연수 뒤집어 배열로 만들기 (0) | 2020.01.15 |
---|---|
코딩 테스트 - 자릿수 더하기 (0) | 2020.01.15 |
코딩테스트 - 비밀지도(카카오 공채 1차) (0) | 2020.01.14 |
코딩 테스트 - 최대값과 최솟값 (0) | 2020.01.14 |
코딩테스트 - 약수의 합 (0) | 2020.01.14 |