링크: https://school.programmers.co.kr/learn/courses/30/lessons/12918?language=cpp

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

1. 문제 접근

이 문제에서 고려해야할 부분은 크게 두가지이다.

  1. 문자열 s의 길이가 4혹은 6이 되도록
  2. 문자열이 숫자로만 구성되어 있는지

 

2. 풀이(3가지)

  • int num = s[i] - '0'; 문자를 숫자로 변환해서 비교
    (참고)[C++] 문자형태의 숫자 정수 숫자로 바꾸기 (’7’ → 7)
    #include <string>
    #include <vector>
    
    using namespace std;
    
    bool solution(string s) {
        
        // 1번 조건 충족 : 문자열 s의 길이가 4혹은 6이 되도록
        if (s.size() != 4 && s.size() != 6) {
            return false;
        }
        
        bool answer = true;
        for(int i=0 ; i<s.size(); i++){
            int num = s[i] - '0'; // 문자를 숫자로 변환 
            
            if(num>=0 && num<=9){ // 숫자로만 구성되어 있는지 확
                answer = true;
            }
            else return false;
        }
        
        return answer;
    }
  • s[i]>='0' && s[i]<='9' 문자 자체를 비교
    #include <string>
    #include <vector>
    
    using namespace std;
    
    bool solution(string s) {
        
        // 1번 조건 충족 : 문자열 s의 길이가 4혹은 6이 되도록
        if (s.size() != 4 && s.size() != 6) {
            return false;
        }
            
        bool answer = true;
        for(int i=0 ; i<s.size(); i++){
            
            if(s[i]>='0' && s[i]<='9'){ // 변환 배열 자체를 비교
                answer = true;
            }
            else return false;
        }
        
        return answer;
    }
  • isdigit() 함수 사용
    #include <string>
    #include <vector>
    #include <cctype>
    
    using namespace std;
    
    bool solution(string s) {
        
        if (s.size() != 4 && s.size() != 6) {
            return false;
        }
        
        
        bool answer = true;
        for(int i=0 ; i<s.size(); i++){
            if(isdigit(s[i])){ // isdigit() 함수사용
                answer = true;
            }
            else return false;
        }
        
        return answer;
    }

 

3. 최종요약

이 문제는 길이 조건 검사숫자 문자 검사를 함께 해야 한다.

먼저 문자열 s의 길이가 4 또는 6인지 확인하고, 조건에 맞지 않으면 바로 false를 반환한다.

그다음 반복문을 통해 문자열의 각 문자를 하나씩 확인하면서, 숫자가 아닌 문자가 하나라도 있으면 false를 반환한다.

숫자 판별 방법은 크게 3가지가 있다.

int num =s[i]-'0';

처럼 문자를 숫자로 변환해서 비교할 수도 있고,

s[i] >= '0' && s[i] <= '9'

처럼 문자 자체를 비교할 수도 있다.

또는

isdigit(s[i]) 

함수를 사용해 숫자인지 검사할 수도 있다.

실제로는 문자 자체 비교 방식이나 isdigit() 함수 사용 방식이 더 직관적이고 안정적이다.

핵심은 문자열 전체를 한 번에 검사하는 것이 아니라, 반복문으로 한 글자씩 검사해야 한다는 점이다.

+ Recent posts