본문 바로가기
알고리즘/프로그래머스

[C++] 이상한 문자 만들기(연습문제)

by 민-Zero 2020. 6. 16.

문제는 매개변수로 전달받은 문자열 s를 공백에 따라 나뉘는 단어를 기준으로 단어의 짝수번째 문자는 대문자로, 홀수번째는 소문자로 바꾼 문자열을 리턴해야한다. 단어의 첫번째 문자는 0번 인덱스로 취급하여 짝수로 처리해야 한다.

이때 주의할점은 단어 사이의 공백이 1개가 아닐수도 있고 문자열을 반환할때 해당 공백의 갯수도 그대로 반환해주어야 문제가 해결된다.

 

설계 및 구현

구현을 위한 내용은 앞서 파이썬에서 생각했으므로 해당 내용을 이용하여 c++에 맞게 구현해보자.

① 변환한 문자열을 저장하기 위한 string 변수 생성

② 단어별 인덱스를 카운트할 새로운 변수를 생성하여 공백이 아닐경우에 세고 다시 공백이 나오면 초기화하는 작업을 반복하여 대소문자 변경에 활용

③ string의 경우 문자열 덧셈이 문자열을 이어붙이는 것처럼 동작하므로 공백일 경우 새로운 변수에 공백을 더하고 아닐경우 대소문자로 변경한 문자를 새로운 문자에 더하여 해당 변수를 반환

 

① 변환을 마친 문자를 새롭게 저장할 string 타입의 변수 answer를 생성

②, 각 단어별 인덱스번호를 세기 위해 count변수를 생성한다. 그리고 매개변수 s에 대해 반복문을 수행하는데 문자열에 공백이 나올경우 answer에 공백을 추가한뒤 새로운 단어가 뒤에 등장할 수 있기 때문에 count 변수를 0으로 초기화한다. 그럼 공백이아닌 문자가 나올경우 단어의 시작으로 0번 인덱스부터 차례로 짝수 홀수를 판단하여 toupper, tolower 함수를 통해 대소문자로 변경한후 answer에 추가해 주고 count를 늘려 다음 인덱스임을 알려준다. 

해당 과정이 끝난후 answer 문자열을 반환하면 해당 문제를 만족하게 된다.

테스트 또한 문제없이 통과할 수 있었다.

댓글