[COS Pro 1급 Python] 2차 기출문제 9) 비밀번호 검사

정은·2023년 8월 11일

COS Pro 1급

목록 보기
20/26
post-thumbnail

문제 9)

주어진 비밀번호가 안전한지 아닌지 판단하려합니다. 비밀번호의 안전 여부는 다음 규칙으로 판단합니다.

  • 연속된 3자리 이상의 알파벳 혹은 숫자를 사용할 수 없습니다. (abc, cba, 012, 987 등)

비밀번호에 사용할 문자열 password가 매개변수로 주어질 때, 주어진 문자열이 위 규칙에 맞으면 true를, 맞지 않으면 false를 return 하도록 solution 함수를 작성했습니다. 그러나, 코드 일부분이 잘못되어있기 때문에, 몇몇 입력에 대해서는 올바르게 동작하지 않습니다. 주어진 코드에서 한 줄만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.


매개변수 설명

비밀번호에 사용할 문자열 password가 solution 함수의 매개변수로 주어집니다.

  • password는 알파벳 소문자와 숫자로만 이루어진 문자열입니다.
  • password의 길이는 5 이상 20 이하입니다.

return 값 설명

주어진 문자열이 주어진 규칙에 맞으면 true를, 맞지 않으면 false를 return 해주세요.


예시
passwordreturn
"cospro890"true
"cba323"false
예시 설명

예시 #1
주어진 문자열에는 연속된 3자리 이상의 문자열 혹은 숫자가 없습니다.

예시 #2
"cba"가 연속된 3자리 문자열이므로 주어진 규칙에 맞지 않습니다.

주어진 문제 9) 코드

def solution(password):
    length = len(password)
    for i in range(length - 2):
        first_check = ord(password[i + 1]) - ord(password[i])
        second_check = ord(password[i]) - ord(password[i+1])
        if first_check == second_check and (first_check == 1 or first_check == -1):
            return False
    return True

#아래는 테스트케이스 출력을 해보기 위한 코드입니다. 아래 코드는 잘못된 부분이 없으니, solution함수만 수정하세요.
password1 = "cospro890"
ret1 = solution(password1)

#[실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
print("solution 함수의 반환 값은", ret1, "입니다.")

password2 = "cba323"
ret2 = solution(password2)

#[실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
print("solution 함수의 반환 값은", ret2, "입니다.")

Solution

주어진 문제 9) Solution 코드

이번엔 빈칸 채우기, 함수 작성 문제가 아니라 코드 오류를 찾는 문제이다.
주어진 코드에서 한 줄만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하는 문제이다.

def solution(password):
    length = len(password)
    for i in range(length - 2):
        first_check = ord(password[i + 1]) - ord(password[i])
        second_check = ord(password[i + 2]) - ord(password[i+1]) # 수정
        if first_check == second_check and (first_check == 1 or first_check == -1):
            return False
    return True

#아래는 테스트케이스 출력을 해보기 위한 코드입니다. 아래 코드는 잘못된 부분이 없으니, solution함수만 수정하세요.
password1 = "cospro890"
ret1 = solution(password1)

#[실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
print("solution 함수의 반환 값은", ret1, "입니다.")

password2 = "cba323"
ret2 = solution(password2)

#[실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
print("solution 함수의 반환 값은", ret2, "입니다.")

해당 문제는 암호 문자열에 연속된 3자리 문자가 사용되었는지 확인하는 구문을 구현해야한다.

  • (뒷 문자 아스키 값 - 앞 문자 아스키 값)의 연산 결과로 -1 혹은 1이 연속으로 두번 나오면 안전한 비밀번호가 될 수 없다.

참고 : 조건문을 아래와 같이 abs() 함수를 사용해도 같은 결과를 얻을 수 있다.

if first_check == second_check and abs(first_check) == 1:
profile
정니의 이런거 저런거 기록 일지 😛

0개의 댓글