문제 설명
문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
제한 사항
s는 길이 1 이상, 길이 8 이하인 문자열입니다.
s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.
입출력 예
s return
"a234" false
"1234" true
1. 문자열의 길이 4, 6을 확인
2. 문자열 길이가 4, 6일 때 s의 문자열을 순회하여 숫자인지 확인(아스키 코드를 이용함)
3. s의 원소(문자)가 숫자면 1을, 아니면 0을 곱함(true = 1, false = 0 을 이용함)
#include <string>
#include <vector>
using namespace std;
bool solution(string s)
{
bool answer = false; // 기본이 false
int num = 1;
if (s.length() == 4 || s.length() == 6) // 문자열 길이 4, 6 먼저 확인
{
for (auto str : s) // s를 순회
{
if (str >= 48 && str <= 57) // ASCII코드 48~57 = 숫자 0~9
{
num *= 1;
}
else
{
num *= 0;
}
}
}
answer = num;
return answer;
}
위 코드처럼 하니 어떤 상황에서는 실패가 떴다.
로직상 문제는 없어 보이지만 num은 int, answer는 bool 타입 이여서 대입할 때 뭔가 문제가 일어나는 것 같다.
그래서 num을 사용하지 않고 기본이 true고 조건에 만족하지 않는 상황에서 false를 반환하도록 구현했다.
#include <string>
#include <vector>
using namespace std;
bool solution(string s)
{
bool answer = true; // 기본이 true
if(s.length() != 4 && s.length() != 6) // 문자열 길이 4, 6 아니면 false
{
return false;
}
for(auto str : s) // s 문자열 순회
{
if(str < '0' || str > '9') // ASCII 코드를 이용
{
return false;
}
}
return answer;
}
위처럼 하니 로직은 바뀐게 없지만 해결이 됐다.
'코딩 연습' 카테고리의 다른 글
프로그래머(약수의 개수와 덧셈) (0) | 2025.09.03 |
---|---|
프로그래머스(콜라츠 추측) (1) | 2025.08.28 |
프로그래머스(정수 제곱근 판별) (2) | 2025.08.26 |
프로그래머스(문자열을 정수로 바꾸기) (1) | 2025.08.25 |