링크: https://school.programmers.co.kr/learn/courses/30/lessons/12918?language=cpp
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
1. 문제 접근
이 문제에서 고려해야할 부분은 크게 두가지이다.
- 문자열 s의 길이가 4혹은 6이 되도록
- 문자열이 숫자로만 구성되어 있는지
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() 함수 사용 방식이 더 직관적이고 안정적이다.
핵심은 문자열 전체를 한 번에 검사하는 것이 아니라, 반복문으로 한 글자씩 검사해야 한다는 점이다.
'코테 정리 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스/C++] 시저 암호 (Lv.1) (0) | 2026.05.18 |
|---|---|
| [프로그래머스/C++] 가장 가까운 같은 글자 (Lv.1) (0) | 2026.05.14 |
| [프로그래머스/C++] 최소직사각형 (Lv.1) (0) | 2026.05.13 |
| [프로그래머스/C++] 삼진법 뒤집기 (Lv.1) (0) | 2026.05.12 |
| [프로그래머스/C++] 행렬의 덧셈 (Lv.1) (0) | 2026.05.07 |
