본문 바로가기
Cospro 2급/C언어

[6차] 문제6. 비밀번호는 만드는것보다 검사하는게 힘들죠. 답안 및 풀이

by SRin23 2021. 5. 30.

◇ 문제 설명

X사이트에서는 회원가입을 할 때 다음의 규칙을 지켜 비밀번호를 생성해야 합니다

1. 한개 이상의 알파벳 대문자를 포함해야 합니다.
2. 두개 이상의 알파벳 소문자를 포함해야 합니다.
3. 두개 이상의 숫자를 포함해야 합니다.

생성하고자 하는 비밀번호 password가 매개변수로 주어질때, 생성가능한 비밀번호면 true를 그렇지 않으면 false를 return하도록 solution함수를 작성하려 합니다.
빈칸을 채워 전체 코드를 완성해주세요.

 

◇ 매개변수 설명

생성하고자 하는 비밀번호 password가 solution함수의 매개변수로 주어집니다.
 ▶ password는 알파벳 대문자, 소문자, 숫자로만 이루어진 문자열 입니다.
 ▶ password의 길이는 5이상 15이하입니다.

 

◇ return값 설명

생성가능한 비밀번호면 true를 그렇지 않으면 false를 return합니다.

 

◇ 예시

  password return
예시 #1 "helloworld" false
예시 #2 "Hello123" true

 

◇ 예시 설명

예시 #1
알파벳 대문자와 숫자를 포함하지 않습니다.

예시 #2
알파벳 대문자 1개, 알파벳 소문자 4개, 숫자 3개를 포함했으므로 생성할 수 있습니다.

 

◇ 초기 내용

[출처]goormedu COSPRO 2급 기출문제 [6차] 문제6 초기내용


◇ 답안

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

bool solution(char* password) {
	bool answer;

	int capital_count = 0, small_count = 0, digit_count = 0;
	for(int i = 0; i < strlen(password); i++) {
		if(password[i] >= 'A' && password[i] <= 'Z')
			capital_count++;
		else if(password[i] >= 'a' && password[i] <= 'z')
			small_count++;
		else if(password[i] >= '0' && password[i] <= '9')
			digit_count++;
	}

	if(capital_count>=1&&small_count>=2&&digit_count>=2)
		answer = true;
	else
		answer = false;

	return answer;
}

int main() {
	char* password1 = "helloworld";
	bool ret1 = solution(password1);

	printf("solution 함수의 반환 값은 %s 입니다.\n", ret1 ?  "true" : "false");

	char* password2 = "Hello123";
	bool ret2 = solution(password2);

	printf("solution 함수의 반환 값은 %s 입니다.\n", ret2 ?  "true" : "false");
}

 

◇ 답안 힌트

    ▶ 주의) 숫자 0~9와 문자 '0'~'9'는 다릅니다!!!

    ▶ 대문자, 소문자, 숫자의 개수가 적어도 몇개가 필요한지 검사하는 부분이 필요합니다.

 

◇ 답안 풀이

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

bool solution(char* password) {
    bool answer;

    //값 초기화
    int capital_count = 0, small_count = 0, digit_count = 0;

 

    //0부터 password의 길이 까지 for문 반복
    for(int i = 0; i < strlen(password); i++) {

        //대문자 입력시 count 1증가
        if(password[i] >= 'A' && password[i] <= 'Z')
            capital_count++;

        //소문자 입력시 count 1증가
        else if(password[i] >= 'a' && password[i] <= 'z')
            small_count++;

        //숫자 입력시 count 1증가

        //0과 '0'은 다릅니다. 0은 정수형이며, char로 입력받은 '0'은 아스키코드로 48번을 말합니다.
        else if(password[i] >= '0' && password[i] <= '9')
            digit_count++;
    }

    //대문자가 적어도 1개이상, 소문자가 2개이상, 숫자가 2개이상이어야 비밀번호 생성이 가능합니다.
    if(capital_count>=1&&small_count>=2&&digit_count>=2)
        answer = true;
    else
        answer = false;

    return answer;
}

 

 

◇ 실행결과

[6차] 문제6) 비밀번호는 만드는 것보다 검사하는게 힘들죠 실행결과

 

◇ 출처

https://edu.goorm.io/learn/lecture/16921/cos-pro-2%25EA%25B8%2589-%25EA%25B8%25B0%25EC%25B6%259C%25EB%25AC%25B8%25EC%25A0%259C-c%25EC%2596%25B8%25EC%2596%25B4

 

COS PRO 2급 기출문제 - C언어 - 구름EDU

YBM IT에서 시행하는 COS Pro 자격증 기출문제를 직접 풀어볼 수 있는 실습 위주의 강좌입니다.

edu.goorm.io

 

댓글