Solution 함수 - Solution hamsu

Solution 함수 - Solution hamsu

말그대로 쉬운 

문자열 기초 문제입니다.

Level 1 - 문자열 다루기 기본

문제

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 작성하시오.

예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.

풀이

매우매우 간단해요. 모든 문자열은 아스키코드로 해석되는거 아시죠?!

1. 문자열 길이 체크

2. 숫자만 있는지 체크

그냥 문제에 나와있는 조건만 확인해주시면 끝입니다.

[C ++]

문자열을 다루는 문제인만큼 문자열 관련 포스팅을 보고 오면 실력을 쌓는데 도움이 됩니다.

1. string 라이브러리 사용법 1탄 포스팅

2. string 라이브러리 총 정리 2탄

#include <string>
#include <iostream>
using namespace std;

bool solution(string s) {
    bool answer = true;
    if (s.length() != 4 && s.length() != 6)
        answer = false;
    else {
        for (int i = 0; i < s.length(); i++)
        {
            if (!(s.at(i) >= '0' && s.at(i) <= '9'))
            {
                answer = false;
                break;
            }
        }
    }
    return answer;
}

[C++]

두 번째! cctype 헤더에는 문자들을 구분해주는 함수들이 정리되어 있답니다.

아마 제 포스팅을 꾸준하게 봤던 분이라면(?) 백준 알고리즘 문자열 문제 풀이에서 공백인지 판별해주는 isspace함수를 사용했던 걸 본적 있으실거예요

이번에는 cctype 헤더의 isdigit() 문자그대로 숫자인지 판별해주는 함수를 이용해서 풀어볼게요

#include <string>
#include <cctype>
#include <iostream>
using namespace std;

bool solution(string s) {
    bool answer = true;
    if (s.length() != 4 && s.length() != 6)
        answer = false;
    else {
        for (int i = 0; i < s.length(); i++)
        {
            if (!isdigit(s[i))
            {
                answer = false;
                break;
            }
        }
    }
    return answer;
}

저렇게 if else로 판별을 먼저 해주고 마지막에 값을 return할 수도 있지만

else 의 부가적인 블럭처리가 별로 안이쁘다면 9번라인을 return false; 로 변경해 바로 종료할 수 있습니다.

[Java]

자바 언어도 똑같은 로직으로 해결할 수 있어요. C언어의 at()함수와 Java의 charAt()함수는 같은 기능을 한다는거 알고 있죠? else부문을 없애주기 위해 if비교문을 대우인 s.length()==4 || s.length()==6 로 바꿔 적용해봤어요. 코드가 좀 더 간결해졌네요 ㅎㅎ

class Solution{
    public boolean solution(String s){
        if(s.length() == 4 || s.length() == 6){
            for( int i=0; i<length; i++){
                if(s.charAt(i) >= '0' && s.charAt(i) <='9')
                    return true; 
            }
        }
        return false;
    }
}

C의 isdigits()함수 대신에 자바에서는 Character.isDigit()을 사용할 수 있습니다. 로직이 똑같으니까 두번째꺼는 생략하고 이번에는 다른 방식으로 문제를 풀이해볼게요 

[Java]

이렇게 푸신 분들도 많으실 것 같은데 정규 표현식으로 문자열을 검증해주는 방법이 있습니다. ㅎㅎ 정규표현식은 처음에 어려워하는 부분중에 하나인데 유용하므로 꼭 익혀둬야해요. C에서 또한 똑같이 적용할 수 있습니다.

class Solution {
 public boolean solution(String s) {
        if(s.length()==4||s.length()==6) {
            return s.matches("^[0-9]*$");
        }
        return false;
    }    
}

문자열이 숫자로만 이루어져있어야 하니까 

^: 시작

[0-9]: 숫자로만

*$: 0개이상의 글자로 끝남.

근데 앞에 조건문으로 4길이 또는 6길이만 들어오도록 걸어놨으니 길이가 4 혹은 6이면서 숫자인 문자열들만 받을거예요. ㅎㅎ 일치하면 1을 리턴합니다.

안녕하세요. BlockDMask 입니다.

날이 너무 덥네요.. 에어컨이 없으면 일상생활이 불가능할 정도에요.

그래도 힘내서 오늘도 문제를 풀어봅시다.

0. 제목

프로그래머스 LEVEL 1 '문자열 다루기 기본' 입니다.

1. 문제 설명

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성되어있는지 확인해 주는 함수, solution을 완성하세요.

예를 들어 s가 "a234" 이면 false를 리턴하고 "1234이면 true를 리턴하면 됩니다.

제한사항 s는길이가 1이상, 8이하인 문자열 입니다.

2. 풀이 과정

문제를 보면 우리가 쳐내야 할것이 두개가 있지요.

첫번째 조건은 문자열의 길이가 4 또는 6이다.

두번째 조건은 모두가 숫자 이어야한다. 입니다.

첫번째 조건은 string 클래스의 래퍼런스들 length() 또는 size() 를 이용하여 길이를 가지고와서 비교 하면 되겠습니다. 

(string 클래스 관련 포스팅은 아래 연관글 목록에 작성해 두겠습니다.)

두번째 조건은 모두가 숫자 이어야한다. <cctype>, ctype.h 헤더에 속해있는 isdigit 함수도 있지만, 아스키 코드 표를 보고 문제를 푸셨으면 해서 일부러 저렇게 풀어 보았습니다.

('0' = 15, '9' = 24) 입니다. 

구글에 아스키 코드 표 한번 쳐 보시고 이게 무엇인가 하고 한번이라도 보시면 도움이 많이 될 것입니다.

3. 소스 코드

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

#include <string>

#include <vector>

//#include <cctype>

using namespace std;

bool solution(string s) 

{

//1. 길이로 쳐낸다.

const size_t length = s.length();

if(length != 4 && length != 6)

{

return false;

}

//2. 문자가 있으면 쳐낸다.

for(size_t i=0; i<length; ++i)

{

//if(!isdigit(s[i]))

if(!(s[i] >= '0' && s[i] <= '9'))

{

return false;

}

}

return true;

}


cs

4. 채점

Solution 함수 - Solution hamsu

읽어주셔서 감사합니다.