[C++/프로그래머스] 문자열 다루기 기본

다곰·2022년 10월 6일
0

우당탕탕 코테준비

목록 보기
4/98

✅ LV 1

✏️ 솔루션

  1. 문자열 길이가 4, 6이 아니면 false 반환
  2. 문자열에 문자가 포함되어 있으면 false 반환

👩🏻‍💻 1차 코드

#include <string>
#include <vector>

using namespace std;

bool solution(string s) {
    bool answer = true;
    
    if(s.size()!=4) {
        if(s.size()!=6) return false;
    }
    
    for(int i=0;i<s.size();i++) {
        int c=s[i];
        if(c<48 || c>57) {
            answer=false;
            return answer;
        }
    }
    
    return answer;
}

✏️ 1차 풀이과정

  1. 길이가 4 가 아닌 문자열 중에 길이가 6 도 아닌 문자열은 false 반환
    ➡️ if(s.size()!=4 || s.size()!=6) 형태로 판별할 경우, 문자열 길이가 4 인데도 false 로 판별해버리는 오류가 있어서 대안으로 이중 if 문을 사용했는데 비효율적이라서 개선 필요
  2. 문자열의 각 자리를 char 형으로 받아서 ASCII 코드로 변환해 0~9의 ASCII 코드값인 48~57 사이의 값인지 확인해 숫자인지 판별
    ➡️ char 형의 문자를 ASCII 코드로 변환하기 위해 숫자형 변수에 한번 더 문자를 할당하는 과정이 메모리 낭비일 수 있음

🔗 [C++] 문자➡️ASCII 코드 변환

👩🏻‍💻 2차 코드

#include <string>
#include <isdigit>
#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;
}

✏️ 2차 풀이과정

ASCII 코드로 판별하는 방법 대신 isdigit 라이브러리의 isdigit 함수를 사용해 문자열의 각 문자를 문자인지, 숫자인지 판별

🔗 [C++] isdigit 함수
🔗 [C++] 삼항연산자

profile
다교미의 불꽃 에러 정복기

0개의 댓글