코딩테스트/C언어

[Level1] 문자열 다루기 기본 답안 및 풀이

SRin23 2021. 6. 7. 22:08

◇ 문제 설명

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.

 

◇ 제한 조건

  • s는 길이 1 이상, 길이 8 이하인 문자열입니다

 

◇ 입출력 예시

s return
"a234" false
"1234" true

 

◇ 초기 내용

※ [출처] 프로그래머스-코딩테스트 연습-문제명

※ 초기 내용을 참고하여 문제에 맞는 코드를 작성하세요.

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
bool solution(const char* s) {
    bool answer = true;
    return answer;
}

 


◇ 답안

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
bool solution(const char* s) {
    bool answer = true;
    int cnt = 0;
    
    if(strlen(s)!=6&&strlen(s)!=4){
        return false;
    }
    
    for(int i = 0; i<strlen(s); i++){
        if(s[i]>='0' && s[i]<='9'){
            cnt++;
        }
    }
    
    if(cnt != strlen(s)){
        return false;
    }
    
    return answer;
}

 

◇ 답안 힌트

    ▶ 가장 먼저 문자열의 길이를 확인 후, 4또는 6이 아니면 바로 false반환

    ▶ 0~9사이의 값을 확인한 변수가 문자열의 길이와 같지 않으면 false반환

 

◇ 답안 풀이

(※ 실행 흐름 순으로 해석됩니다.)

bool solution(const char* s) {
    bool answer = true;
    int cnt = 0;
    

    //문자열의 길이가 6또는 4가 아니면 false를 return함
    if(strlen(s)!=6&&strlen(s)!=4){
        return false;
    }
    

    //문자열의 내용이 0~9사이인지 확인하고, 0~9사이이면 cnt+1
    for(int i = 0; i<strlen(s); i++){
        if(s[i]>='0' && s[i]<='9'){
            cnt++;
        }
    }
    

    //위에서 체크한 0~9사이의 값이 전체 문자열의 길이와 같으면, 전체가 0~9사이의 값으로 이루어진것이지만, 둘의 값이 다르면 하나라도 0~9사이의 값이 아닌게 문자열에 들어있는 것으로 알고 false를 return
    if(cnt != strlen(s)){
        return false;
    }
    

    //위의 return false하는 예외상황이 아니면 모두 true로 반환
    return answer;
}

 

 

◇ 실행결과

문자열 다루기 기본 실행결과

 

◇ 출처

https://programmers.co.kr/learn/challenges

 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr