작성일 :

문제 링크

15239번 - Password check

설명

비밀번호가 소문자, 대문자, 숫자, 지정된 기호를 모두 포함하고 길이가 12 이상인지 판별하는 문제입니다.


접근법

먼저 각 비밀번호를 한 글자씩 보면서 소문자, 대문자, 숫자, 기호가 있는지 표시합니다.

다음으로 길이가 12 이상인지 확인합니다.

마지막으로 네 종류의 문자가 모두 존재하고 길이 조건을 만족하면 valid, 아니면 invalid를 출력합니다.



Code

C#

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
28
29
30
31
32
33
34
35
using System;
using System.Text;

class Program {
  static void Main() {
    var parts = Console.In.ReadToEnd().Split();
    var idx = 0;
    var n = int.Parse(parts[idx++]);
    var symbols = "+_)(*&^%$#@!./,;{}";

    var sb = new StringBuilder();
    for (var i = 0; i < n; i++) {
      var s = int.Parse(parts[idx++]);
      var pw = parts[idx++];

      var hasLower = false;
      var hasUpper = false;
      var hasDigit = false;
      var hasSymbol = false;

      for (var j = 0; j < pw.Length; j++) {
        var c = pw[j];
        if (c >= 'a' && c <= 'z') hasLower = true;
        else if (c >= 'A' && c <= 'Z') hasUpper = true;
        else if (c >= '0' && c <= '9') hasDigit = true;
        else if (symbols.IndexOf(c) >= 0) hasSymbol = true;
      }

      if (s >= 12 && hasLower && hasUpper && hasDigit && hasSymbol) sb.AppendLine("valid");
      else sb.AppendLine("invalid");
    }

    Console.Write(sb);
  }
}

C++

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
28
29
30
31
32
33
#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int n;
  if (!(cin >> n)) return 0;
  string symbols = "+_)(*&^%$#@!./,;{}";

  for (int i = 0; i < n; i++) {
    int s; string pw;
    cin >> s >> pw;

    bool hasLower = false;
    bool hasUpper = false;
    bool hasDigit = false;
    bool hasSymbol = false;

    for (char c : pw) {
      if (c >= 'a' && c <= 'z') hasLower = true;
      else if (c >= 'A' && c <= 'Z') hasUpper = true;
      else if (c >= '0' && c <= '9') hasDigit = true;
      else if (symbols.find(c) != string::npos) hasSymbol = true;
    }

    if (s >= 12 && hasLower && hasUpper && hasDigit && hasSymbol) cout << "valid\n";
    else cout << "invalid\n";
  }

  return 0;
}