프로그래머스의 JadenCase 문자열 만들기 (Lv2) 문제이다.
[ 문제풀이 ]
모든 단어의 첫 문자가 대문자 이고 그 외에 문자는 모두 소문자인 문자열을 만들어야 한다.
그렇다면, 우리는 대/소문자를 변경하기 위해서 2가지 조건을 생각해 볼 수 있다.
1. 현재 탐색하고 있는 문자가 소문자이고 , 그 전에 있는 문자가 띄어쓰기(' ') 인 경우
2. 현재 탐색하고 있는 문자가 대문자이고 , 그 전에 있는 문자가 띄어쓰기(' ')가 아닌 경우
이렇게 2가지를 체크해 주면 된다.
1번 조건을 보게되면 현재 소문자인데, 그 전에 있는 문자가 띄어쓰기라면, "모든 단어의 첫 문자가 대문자" 라는 문제의
조건에 위배되기 때문에 대문자로 바꿔주면 된다.
2번 조건을 보게되면 현재 대문자인데, 그 전에 있는 문자가 띄어쓰기가 아니라면, "그 외의 알파벳은 소문자" 라는 문제의
조건에 위배되기 때문에 소문자로 바꿔주면 된다.
그리고 ! 예외적으로 가장 앞에 있는 문자를 따로 처리해 주어야 한다.
왜냐하면 문자열에 가장 앞에 있는 문자는, 그 전에 문자가 존재하지 않는다. 즉 ! 띄어씌기 인지 아닌지 판단이 되지 않는
부분이기 때문에, 문자열의 가장 앞에 있는 문자는 예외적으로 무조건 대문자로 바꿔주는 과정이 필요하다.
[ 소스코드 ]
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 | #include <string> #include <vector> using namespace std; char BigAlpha[26] = { 'A','B','C','D','E','F', 'G','H','I','J','K','L', 'M','N','O','P','Q','R', 'S','T','U','V','W','X','Y','Z' }; char SmallAlpha[26] = { 'a','b','c','d','e', 'f','g','h','i','j', 'k','l','m','n','o', 'p','q','r','s','t', 'u','v','w','x','y','z' }; string solution(string s) { if ('a' <= s[0] && s[0] <= 'z') s[0] = BigAlpha[s[0] - 'a']; for (int i = 1; i < s.length(); i++) { if (s[i - 1] == ' ' && ('a' <= s[i] && s[i] <= 'z')) { s[i] = BigAlpha[s[i] - 'a']; } else if (s[i - 1] != ' ' && ('A' <= s[i] && s[i] <= 'Z')) { s[i] = SmallAlpha[s[i] - 'A']; } } return s; } | cs |
'[ Programmers Code ] > # PG - Level2' 카테고리의 다른 글
[ 프로그래머스 문자열 압축 (Lv2) ] (C++) (1) | 2020.09.08 |
---|---|
[ 프로그래머스 단체사진 찍기 (Lv2) ] (C++) (0) | 2020.05.15 |
[ 프로그래머스 피보나치 수(Lv2) ] (C++) (0) | 2020.05.14 |
[ 프로그래머스 최솟값 만들기 (Lv2) ] (C++) (0) | 2020.05.12 |
[ 프로그래머스 최댓값과 최솟값 (Lv2) ] (C++) (4) | 2020.05.11 |