[C++] 프로그래머스 문자열 다루기 기본
반응형
programmers.co.kr/learn/courses/30/lessons/12918
1. 서론
level 1의 기본 문제다. 문제 자체가 어렵지 않은 것은 말할 것도 없으나 코드를 어떻게 예쁘게 짜는지가 관건인 것 같다.
오늘도 많이 배운다...
2. 문제 풀이
문자열이 있는데 조건이 있다.
이 문자열은 길이 4 혹은 6이어야 하며, 무조건 숫자로만 이루어져야 한다. 혹시 문자가 들어갔거나 길이가 4 혹은 6이 아니라면 무조건 false. 주어진 조건에 맞다면 true를 return.
난 조건을 걸었다. 알파벳인 경우에는 무조건 false, 그리고 길이가 4 혹은 6이 아니면 무조건 true.
쉽게 통과했지만 만약에 테스트 케이스에 알파벳 말고도 특수 문자가 있었다면 걸렸을지도 모른다.
운이 좋게도 알파벳만 들어있는지 맞았다.
3. 코드 설명
1) 나의 코드
#include <string>
#include <vector>
using namespace std;
bool solution(string s) {
bool answer = true;
int i;
for (i = 0; i < s.size(); i++)
{
if ((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z'))
{
answer = false;
break;
}
}
if (s.size() != 4)
if (s.size() != 6)
answer = false;
return answer;
}
정말 직관적인 코드이다. 문자열에서 소문자 a~z, 대문자 A~Z가 나오면 answer를 false로 바꾸고 for문에서 빠져나온다.
그 후 문자열의 길이가 4나 6이 아닌지 검사 후 answer값을 return 한다.
정답 후에 오늘도 다른 사람들은 어떻게 풀었나 보러 갔는데...
2) 최적의 코드
#include <string>
#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;
}
참 간단하다. isdigit()은 이 값이 숫자인지 아닌지 판단해주는 함수다. 문제의 조건이 숫자여야만 하는 것이기 때문에 딱 맞다.
그리고 삼항 연산자도 좀 써 버릇해야 하는데... 참 갈 길이 멀다!
반응형
'Algorithm' 카테고리의 다른 글
[C++] 프로그래머스 소수 찾기 (with 에라토스테네스의 체) (0) | 2020.11.18 |
---|---|
[C++] 프로그래머스 서울에서 김서방 찾기 (0) | 2020.11.16 |
[C++] 프로그래머스 문자열 내림차순으로 배치하기 (0) | 2020.11.13 |
[C++] 프로그래머스 문자열 내 p와 y의 개수 (0) | 2020.11.12 |
[C++] 프로그래머스 문자열 내 마음대로 정렬하기 (0) | 2020.11.12 |