문제 설명
문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
제한사항
- s는 길이 1 이상, 길이 8 이하인 문자열입니다.
- s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.
입출력 예
s | return | ||
"a234" | false | ||
"1234" | true |
문제 풀이
풀이 언어 : C++
#include <string>
#include <vector>
#include <cctype>
using namespace std;
bool solution(string s) {
bool answer = true;
// 문자열 길이 확인
if(s.length()!=4&&s.length()!=6)
{
answer=false;
return answer;
}
// 알파벳이 포함되어 있는지 확인
for(int i=0; i<s.length(); i++)
{
if(isdigit(s[i])==0)
{
answer=false;
break;
}
}
return answer;
}
우선 문자열의 길이부터 검사하도록 한다. 문자열의 길이부터 4나 6이 아니면 false를 반환하면 된다. 이후에 다른 처리는 하지 않고 코드가 끝난다.
만약 길이가 4나 6이라면 말이 좀 달라진다. 이번엔 문자열에 알파벳이 포함되어 있는지를 확인해야 한다. 문자열도 char로 이루어진 배열과 같으니 for문을 이용하여 문자열 한 글자 한 글자를 뜯어서 보도록 한다. isdigit을 이용하면 0~9사이의 문자는 0이 아닌 다른 수가 나오고 그 외의 문자는 0을 반환한다. 따라서 한 글자씩 보면서 isdigit가 0을 반환하는지 보면 알파벳을 포함하고 있는지 확인할 수 있다. 만약 isdigit(s[i])가 0을 반환한다면 answer=false로 하고 반복을 즉시 중단하면 된다.
결국 문자열 길이도 통과하고 알파벳이 포함되어 있는지 확인하는 반복문도 중간에 중단되지 않고 통과하면 answer은 true로 값 변경 없이 끝까지가 결국 true를 반환할 것이다.
참고 사항
isdigit(char c)는 매개변수로 들어온 c가 숫자인지 문자인지 판단하는데 도움을 주는 함수이다. 만약 c가 문자라면 0을 반환하고 c가 "0"~"9"라면 0이 아닌 다른 수를 반환한다. 그렇다고 하여 "0"은 0을 반환하고 "9"는 9를 반환하는 것은 아니다. 함수를 사용하기 위해서는 #include <cctype> 전처리가 필요하다.
cout<<isdigit('B')<<endl; // 0
cout<<isdigit('5')<<endl; // 0이 아닌 다른 수
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/12918
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
'Code KATA > 알고리즘 코드카타' 카테고리의 다른 글
[2025.01.08] 직사각형 별찍기 (0) | 2025.01.07 |
---|---|
[2025.01.07] 행렬의 덧셈 (0) | 2025.01.07 |
[2025.01.05] 부족한 금액 계산하기 (0) | 2025.01.06 |
[2025.01.04] 문자열 내림차순으로 배치하기 (1) | 2025.01.03 |
[2025.01.03] 약수의 개수와 덧셈 (0) | 2025.01.03 |