code/[프로그래머스] python

[코딩 테스트 연습 입문] 로그인 성공?

오리는짹짹 2022. 12. 30. 22:54

문제

머쓱이는 프로그래머스에 로그인하려고 합니다. 머쓱이가 입력한 아이디와 패스워드가 담긴 배열 id_pw와 회원들의 정보가 담긴 2차원 배열 db가 주어질 때, 다음과 같이 로그인 성공, 실패에 따른 메시지를 return하도록 solution 함수를 완성해주세요.

  • 아이디와 비밀번호가 모두 일치하는 회원정보가 있으면 "login"을 return합니다.
  • 로그인이 실패했을 때 아이디가 일치하는 회원이 없다면 “fail”를, 아이디는 일치하지만 비밀번호가 일치하는 회원이 없다면 “wrong pw”를 return 합니다.

 

❗제한사항

  • 회원들의 아이디는 문자열입니다.
  • 회원들의 아이디는 알파벳 소문자와 숫자로만 이루어져 있습니다.
  • 회원들의 패스워드는 숫자로 구성된 문자열입니다.
  • 회원들의 비밀번호는 같을 수 있지만 아이디는 같을 수 없습니다.
  • id_pw의 길이는 2입니다.
  • id_pw와 db의 원소는 [아이디, 패스워드] 형태입니다.
  • 1 ≤ 아이디의 길이 ≤ 15
  • 1 ≤ 비밀번호의 길이 ≤ 6
  • 1 ≤ db의 길이 ≤ 10
  • db의 원소의 길이는 2입니다.

 

입출력 예

 

입출력 예 설명

입출력 예 #1

  • db에 같은 정보의 계정이 있으므로 "login"을 return합니다.

입출력 예 #2

  • db에 아이디는 같지만 패스워드가 다른 계정이 있으므로 "wrong pw"를 return합니다.

입출력 예 #3

  • db에 아이디가 맞는 계정이 없으므로 "fail"을 return합니다.

 

✔풀이

def solution(id_pw, db):

    if id_pw in db:
        return "login"

    else:
        for db_id_pw in db:
            if id_pw[0]==db_id_pw[0]:
                return "wrong pw"

    return "fail"

📝설명

경우는 문제에서 설명하다시피 3가지이다.

id_pw가 db 안에 존재한다면 "login", 아이디만 같다면 "wrong fail", 아예 같은 게 없다면 "fail"을 리턴한다..

id_pw가 db안에 존재하는 경우에 대한 걸 if문을 통해 먼저 다뤘다.

그렇다면 남는 경우는 어떻게 처리할까?

아이디가 db에 있는지 없는지만 확인하면 된다.

왜냐하면, 실제로 db에 id가 존재하는 경우는 pw가 같은 경우와 다른 경우로 총 2가지로 나누어지지만!

if문에서 이미 같은 경우를 다뤘기 때문에 이번엔 id의 일치 여부만 확인하면 된다.

따라서, db안에 있는 배열을 하나씩 꺼내어 비교하기 위해서 for문에 집어넣었다.

그 후 id_pw의 id부분과 꺼내어진 1차원 배열의 아이디와 비교하여 같으면 " wrong pw"를 리턴하도록 했다.

나머지의 경우는 "fail"이 리턴되도록 코드를 짰다.

 

👑모범 답안

🔎딕셔너리에서 .get()을 사용하면 괄호 안에 있는 부분의 value를 호출해올 수 있다고 한다.

if문을 뜯어서 생각해보면, 우선 db를 딕셔너리로 변환한 후, key가 id_pw[0] (=id 부분)과 같은 게 있으면 해당 key를 가진 db의 value(db의 pw 부분)를 db_pw에 저장했다.

만약 아이디가 같은 부분이 없다면 곧장 "fail"로 return된다.

db_pw가 저장됐다면, 이 db_pw와 id_pw의 pw부분을 비교한다. 

둘이 같다면 아이디와 비밀번호 모두 일치한 것이므로 "login"을, 그렇지 않은 경우에는 "wrong pw"을 return하도록 한다. 

 

👀느낀 점

: 딕셔너리의 get에 대해서 처음 알게 되었다.

2차원 배열은 항상 어렵게 느껴져서 접근하기가 까다롭다고 생각했는데, 딕셔너리로 바꾸고 get을 사용하면 보다 쉽게 문제를 해결할 수 있을 것 같다는 근자감이 든다..^^ 

 

💻 문제 출처

코딩테스트 연습 - 로그인 성공? | 프로그래머스 스쿨 (programmers.co.kr)