Algorithm/알고리즘 이론

세무민의 코딩일기 : NYPC 2019 [연습문제] 비밀번호 검사 문제 풀기

세기루민 2021. 1. 28. 11:25
728x90

우선 시험이 끝난 후 조금 코딩연습했던 내용들을 올려볼 생각인데.....

일단 시험을 너무 망쳤지만 알고리즘 공부의 중요성을 한번 더 알게 되었다. 

사실 1차 서류 합격으로도 나에게는 큰 경험이지만 

일주일도 안되는 시간동안 알고리즘 공부하는 건 쉽지 않았다. 

무튼 조금씩 꾸준히 공부할 예정이다. 


 

내가 풀어본 문제는 이 문제! 

NYPC에서 문제들을 보면서 나름 어려웠다. 

내가 이 문제를 보자마자 생각난건 바로 아스키코드! 

아스키코드로 비교하면서 특수문자의 경우는 파이썬에서 isalnum()라는 매소드로 

특수문자가 존재하는지 비교하여 문제를 해결했다.

 

#  비밀번호 검사
n = str(input())


def pwCheck(x):
    checkL, checkS, checkN, checkP, check= 0, 0, 0, 0, 1
    
    if len(x) < 8 or len(x) > 16:
        return print('invalid')

    
    for i in range(len(x)):
        num = ord(x[i])
        # 숫자 & e대소문자 & 특수문자 & 영어
        if  ord('A') <= num and ord('Z') >= num:
                checkL += 1
        elif ord('a') <= num and ord('z') >= num:
                checkS += 1
        elif ord('0') <= num and ord('9') >= num:
                checkN += 1
        elif x[i].isalnum() == False:
                checkP += 1
        else:
                check = 0
        
        
        
    if (checkL * checkS * checkN *  checkP * check) == 0:
        print('invalid')
    else:
        print('valid')
        
pwCheck(n)

이렇게 풀었는데 

if - elif문을 사용안하고 

if문으로 특수문자 처음시작하는 부분부터 마지막까지 조건을 줘도 괜찮다. 

그렇게 조건을 주는 경우에는 check 변수는 1개만 써도 무관하다. 

결국 조건에 일치하지 않으면 0을 반환하면서 

check 변수들의 곱했을 때 0이 나온다면 결론적으로 위에 조건에 일치하지 않는 값이 존재하는 것으로 

invalid를 반환시켜줬다 .


NYPC 문제를 조금 더 풀어놨는데 틈틈히 다른 알고리즘도 풀면서 

다음에는 더 좋은 알고리즘 포스팅으로 찾아오겠습니다. 

 

728x90