본문 바로가기
알고리즘/문제

[NYPC] [2019 예선 연습] 1. 비밀번호 검사

by 코드 이야기 2020. 8. 25.
728x90

 문제  

어떤 웹사이트에 회원가입하기 위해서 다음과 같은 비밀번호 조건들이 있다. 입력으로 들어온 문자열이 다음 조건을 만족하는지 확인하는 프로그램을 작성하시오.

  • 비밀번호는 8자 이상 15자 이하이어야 한다.
  • 비밀번호에 영어 대문자가 반드시 포함되어야 한다.
  • 비밀번호에 영어 소문자가 반드시 포함되어야 한다.
  • 비밀번호에 숫자가 반드시 포함되어야 한다.
  • 비밀번호에 특수문자가 반드시 포함되어야 한다.

 

 입력 형식  

입력으로 들어오는 문자열의 최대 길이는 100자이다. 문자열은 영어 대소문자, 숫자, 그리고 특수문자로만 구성되어있다. 특수문자는 `!@#$%^&*()-=_+|;:'"/?,.<>~[]{}``만 주어진다.

 

 

 출력 형식  

입력으로 들어온 문자열이 웹사이트에서 요구하는 조건을 만족하는 문자열이라면 valid를 출력하고, 그렇지 않다면 invalid를 출력한다.

 

 

 입력 예제 1  

{NYPC2019}

 출력 예제 1  

invalid

 

 입력 예제 2  

{NYPc2019}

 출력 예제 2  

valid

 

 채점 방식  

입력 케이스들 각각에 대해 동일한 점수가 배분된다.

이 문제는 연습 문제이므로 점수가 성적에 합산되지 않습니다.

 

 

 

 

 

 

 

  나의 풀이  

check변수에 1을 넣고 시작해서 조건이 하나라도 일치하지 않는다면 0을 넣어서 출력할 때

check변수에 1이 있다면 valid을, 0이 있다면 invalid를 출력해주었다.

 

 

1. 글자의 크기가 8~15가 아니라면 check에 0을 넣는다.

 

 

2. 대소문자, 숫자, 특수문자의 아스키코드를 보면 33~126 사이에 있는 숫자이다. 

 

   그리고 입력 형식을 잘 보면 특수문자에 역슬래쉬(아스키코드: 92)는 포함되지 않는다.

  

   그래서 각 글자가 92거나, 33~126에 포함되지 않는다면 check에 0을 넣는다.

 

 

3. check가 참이라면 valid출력, 거짓이라면 invalid출력.

 

 

- 소스코드

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

int main() {
	string pw;
	int check = 1;

	cin >> pw;

	if (8 > pw.size() || pw.size() > 15)
		check = 0;

	else 
	for (int i = 0; i < pw.size(); i++) {
		if (pw[i] == 92) {
			check = 0;
			break;
		}
		if (33 > pw[i] || pw[i] > 126) {
			check = 0;
			break;
		}
	}

	if (check) cout << "valid";
	else cout << "invalid";
}

 

 

 

 

 

 

728x90

댓글