프로그래머스

프로그래머스 | Python | 로그인 성공?

audwndl 2024. 12. 23. 10:44

 

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

내코드

def solution(id_pw, db):
    for i in db:
        if i[0] == id_pw[0]:
            if i[1] == id_pw[1]:
                return "login"
            else:
                return "wrong pw"
    return "fail"

코드설명

  • for문을 이용해 db를 순회하면서 각 회원 정보를 확인합니다.
  • 입력된 id_pw와 비교하여 아이디가 일치하면 비밀번호를 추가로 검사합니다.
    • 아이디와 비밀번호가 모두 일치하면 "login"을 반환합니다.
    • 아이디는 일치하지만 비밀번호가 다르면 "wrong pw"를 반환합니다.
  • 루프가 끝날 때까지 일치하는 아이디가 없다면 "fail"을 반환합니다.

특징

  • 직관적이고 읽기 쉬운 코드입니다.
  • for문을 이용해 조건을 순차적으로 검사하므로, 데이터의 크기가 커지면 성능이 다소 저하될 수 있습니다.

다른 코드

def solution(id_pw, db):
    if db_pw := dict(db).get(id_pw[0]):
        return "login" if db_pw == id_pw[1] else "wrong pw"
    return "fail"

코드설명

  • dict(db)를 이용해 회원 정보 리스트를 딕셔너리로 변환합니다.
  • id_pw[0](아이디)을 키로 사용해 딕셔너리에서 비밀번호를 찾습니다.
    • 아이디가 존재하고 비밀번호가 일치하면 "login"을 반환합니다.
    • 비밀번호가 다르면 "wrong pw"를 반환합니다.
  • 아이디가 존재하지 않으면 "fail"을 반환합니다.

특징

  • 딕셔너리를 사용해 탐색 속도가 빠릅니다.
  • 코드가 간결하고 Python의 최신 문법(:= 연산자)을 활용합니다.
  • db의 크기가 크면 초기 딕셔너리 변환 비용이 발생합니다.

두 코드 비교

  • 효율성:
    • 내코드는 순차 탐색 방식을 사용해 데이터 크기 증가에 따라 탐색 시간이 증가합니다.
    • 다른 코드는 딕셔너리 변환을 통해 탐색 시간이 일정합니다.
  • 가독성:
    • 내코드는 로직이 명확히 드러나 초보자도 쉽게 이해할 수 있습니다.
    • 다른 코드는 최신 문법과 딕셔너리를 활용해 간결하지만, 익숙하지 않은 문법이 포함되어 있습니다.
  • 유연성:
    • 내코드는 추가 기능(예: 특정 조건 추가)이 필요할 때 더 쉽게 수정할 수 있습니다.
    • 다른 코드는 간결성을 유지하기 위해 복잡한 수정에는 부적합할 수 있습니다.

결론

  • 데이터 크기가 작거나 로직을 명확히 전달하고 싶다면 내코드가 적합합니다.
  • 데이터 크기가 크거나 성능이 중요한 경우 다른 코드가 더 유리합니다.