[프로그래머스] Jaden Case

GomHyeok·2022년 3월 21일
0

📒Jaden Case

📌문제설명

모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열
단, 첫 문자가 알파벳이 아니라면 이어지는 알파벳은 소문자
ex)
input : "3people unFollowed me"
output : "3people Unfollowed Me"

단순히 문제만 본다면 어려울 것이 없는 문제 처럼 보인다.
하지만 집중해서 보지 않는다면 실수 하기 쉬운 문제다.

📌구현

#include <string>
#include <vector>

using namespace std;

bool checkAP (char a){								//알파벳 대소문자 구분
    if(a>='A'&&a<='Z'){
        return false;
    }
    return true;
}

bool checkNum(char a){								//숫자와 알파벳 구분
    if(a>='0'&& a<='9'){
        return true;
    }
    return false;
}

string solution(string s) {
    for(int i=0; i<s.size(); i++){
        if(i==0||s[i-1]==' '){						//string이 첫 번째 칸 또는 공백 뒤(대문자 조건)
            if(checkNum(s[i])||s[i]==' '){			//string이 숫자인지 공백인지 구분(무시조건)
                continue;
            }
            if(checkAP(s[i])){						//string의 대소문자 확인
                s[i]-='a'-'A';
            }
        }
        else{
            if(!checkAP(s[i])){						//string의 소문자 조건에서의 대문자 변환
                s[i]+='a'-'A';
            }
        }
    }
    
    return s;
}

우리가 가장 기본적으로 신경써야 하는 조건은 크게 3가지다

  • 숫자와 알파벳의 구분
  • 대소문자의 위치
  • 대소문자의 구분 기준 (공백)

위의 조건을 확인할 수 있는 함수를 만들어서 활용함으로써 더 효율적으로 풀 수 있었다.


📌주의사항

  • Test Case에서의 연속된 공백의 Case를 생각해야한다.
    - 공백의 중복 조건이 없다면 모두 틀릴 수 있는 case
  • 내가 어떤 것을 구분해야 하는지 명확하게 알아야 한다.
    - 무엇을 구분해야하는지 알아야 필요한 함수를 구현할 수 있다
  • 실제 코딩 테스트에서 ASCII CODE 표는 주어지지 않을 수 있다.
    - 대소문자 변환같은 경우 ASCII CODE 표 없이 'a'-'A'를 활용하자~!!

첫 번째 주의사항이 위에서 말한 최대 함정이다.
저 함정 때문에 생각보다 시간이 많이 필요했던 문제다.
다음부터는 경우의 수를 더 꼼꼼히 신경써야 한다는 생각을 할 수 있었다.

profile
github : https://github.com/GomHyeok/

0개의 댓글