초보 개발자의 이야기, 릿허브

[C++] 프로그래머스 이상한 문자 만들기 본문

코딩테스트/📘 프로그래머스 (programmers)

[C++] 프로그래머스 이상한 문자 만들기

릿99 2021. 9. 19. 09:50
728x90
반응형
1. 문제이해

https://programmers.co.kr/learn/courses/30/lessons/12930

 

코딩테스트 연습 - 이상한 문자 만들기

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을

programmers.co.kr

 

주어진 문자열 s를 공백을 기준으로

짝수번째 문자는 대문자로, 홀수번째 문자는 소문자로 바꾸어 리턴하는 것이 목표이다.

 

 

 

2. 문제풀이

 

문자열 s를 공백을 기준으로 짝수, 홀수번째 문자를 대문자, 소문자로 변환하는 문제이다.

문제의 핵심은 공백을 기준으로 짝수번째와 홀수번째로 나눈다는 것에 있다.

 

위의 입출력 예인 "try hello world" 를 보자.

try의 인덱스는 t = 0, r = 1, y = 2 로, TrY 로 변환해야 한다.

그 다음 단어인 hello를 보면,

앞선 단어 try와 공백에 이어서 h의 인덱스가 4가 되는 것이 아니라,

공백 다음부터 인덱스를 초기화시켜 h의 인덱스가 다시 0이 되어야 한다.

따라서 마지막 단어인 world 또한,

공백 뒤 이어지는 단어이므로, 인덱스를 다시 0으로 초기화해,

w = 0, o = 1, r =2, l =3, d =4가 되어 WoRlD가 되는 것이다.

 

위와 같은 점을 주의하여 공백을 기준으로 인덱스를 초기화시켜 코드를 작성해야한다.

필자도 여기서 헷갈려서 코드를 잘못짜는 일이 발생했다.😥

주어진 코드는 다음과 같았다.

 

 

 

 

3. 소스코드
#include <string>
#include <vector>
#include <cctype>

using namespace std;

string solution(string s) {
    string answer = "";
    int index = 0;  // 공백을 기준으로 재시작하기 위한 인덱스
    
    for(int i = 0; i < s.size(); i++) {
        if(s[i] == ' ') {   // 공백을 찾았다면,
            // 그 자리부터 다시 짝, 홀수를 카운트하기 위해 -1로 초기화
            // -1로 초기화해야 if문이 끝나고 index++을 통해 다음 알파벳부터 0으로 카운트된다.
            index = -1;      
        }
        
        else {
            if(index % 2 == 0) {    // 인덱스를 기준으로 짝수부분
                s[i] = toupper(s[i]);   // 대문자로
            }
            
            else {                  // 인덱스를 기준으로 홀수부분
                s[i] = tolower(s[i]);   // 소문자로
            }
        }
        index++;                    // 인덱스값 증감
    }
    
    answer = s;
    
    return answer;
}

공백을 기준으로 인덱스값이 바뀐다는 점에 유의하여 위와 같이 코드를 작성했다.

인덱스 변수(index)를 추가로 설정한 다음,

if문을 통해 공백을 찾았다면 index 값을 -1로 초기화했다.

( -1로 초기화해야, if문 마지막의 index++을 통해

공백 뒤 나오는 첫 단어부터 index 가 0으로 초기화된다. )

 

공백이 아니라면, 해당 단어의 인덱스를 확인하고,

인덱스값이 짝수라면 해당 단어를 대문자로,

인덱스값이 홀수라면 해당 단어를 소문자로 변환했다.

 

 


내일부터 수요일까지 즐거운 추석연휴🥰🥰

추석연휴에도 코딩을 하게 될지는 의문이지만,

만약 하게 된다면 블로그에도 글을 올려야지🤗

일단, 지금 계획은 쉬는걸로 정했다.😴😴

모두들 즐거운 추석연휴 보내세용🤗

 

 

 

 

728x90
반응형