[C++] 프로그래머스 문자열 다루기 기본
2020. 11. 15.
반응형

programmers.co.kr/learn/courses/30/lessons/12918

 

코딩테스트 연습 - 문자열 다루기 기본

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 a234이면 False를 리턴하고 1234라면 True를 리턴하면 됩니다. 제한 사항 s는 길이 1 이

programmers.co.kr

 

1. 서론

 

level 1의 기본 문제다. 문제 자체가 어렵지 않은 것은 말할 것도 없으나 코드를 어떻게 예쁘게 짜는지가 관건인 것 같다.

오늘도 많이 배운다...

 

2. 문제 풀이

 

문자열이 있는데 조건이 있다. 

이 문자열은 길이 4 혹은 6이어야 하며, 무조건 숫자로만 이루어져야 한다. 혹시 문자가 들어갔거나 길이가 4 혹은 6이 아니라면 무조건 false. 주어진 조건에 맞다면 true를 return.

 

난 조건을 걸었다. 알파벳인 경우에는 무조건 false, 그리고 길이가 4 혹은 6이 아니면 무조건 true.

쉽게 통과했지만 만약에 테스트 케이스에 알파벳 말고도 특수 문자가 있었다면 걸렸을지도 모른다.

운이 좋게도 알파벳만 들어있는지 맞았다. 

 

3. 코드 설명

 

1) 나의 코드

#include <string>
#include <vector>

using namespace std;

bool solution(string s) {
    bool answer = true;
    int i;
    
    for (i = 0; i < s.size(); i++)
    {
        if ((s[i] >= 'a' && s[i] <= 'z') ||  (s[i] >= 'A' && s[i] <= 'Z'))
        {
            answer = false;
            break;
        }   
    }
    
    if (s.size() != 4)
        if (s.size() != 6)
            answer = false;
     
    return answer;
}

 

정말 직관적인 코드이다. 문자열에서 소문자 a~z, 대문자 A~Z가 나오면 answer를 false로 바꾸고 for문에서 빠져나온다.

그 후 문자열의 길이가 4나 6이 아닌지 검사 후 answer값을 return 한다.

 

정답 후에 오늘도 다른 사람들은 어떻게 풀었나 보러 갔는데...

 

2) 최적의 코드

 

#include <string>
#include <vector>
using namespace std;

bool solution(string s) {
    bool answer = true;

    for (int i = 0; i < s.size(); i++)
    {
        if (!isdigit(s[i]))
            answer = false;
    }

    return s.size() == 4 || s.size() == 6 ? answer : false;
}

 

참 간단하다. isdigit()은 이 값이 숫자인지 아닌지 판단해주는 함수다. 문제의 조건이 숫자여야만 하는 것이기 때문에 딱 맞다.

그리고 삼항 연산자도 좀 써 버릇해야 하는데... 참 갈 길이 멀다!

 

 

 

 

 

 

 

 

 

 

반응형
myoskin