[프로그래머스] Lv0.로그인 성공?

싱숭생숭어·2023년 4월 18일

프로그래머스

목록 보기
7/21

문제

문제 설명

머쓱이는 프로그래머스에 로그인하려고 합니다. 머쓱이가 입력한 아이디와 패스워드가 담긴 배열 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입니다.

입출력 예

id_pwdbresult
["meosseugi", "1234"][["rardss", "123"], ["yyoom", "1234"], ["meosseugi", "1234"]]"login"
["programmer01", "15789"][["programmer02", "111111"], ["programmer00", "134"], ["programmer01", "1145"]]"wrong pw"
["rabbit04", "98761"][["jaja11", "98761"], ["krong0313", "29440"], ["rabbit00", "111333"]]"fail"

입출력 예 설명

입출력 예 #1

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

입출력 예 #2

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

입출력 예 #3

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

내 풀이

def solution(id_pw, db):
    dic = dict(db)
    if id_pw[0] not in dic.keys():
        return "fail"
    else:
        if id_pw[1] == dic[id_pw[0]]:
            return "login"
        else:
            return "wrong pw"

이 문제에서 새롭게 알게된 사실
=> 2차원으로 구성된 자료형은 dictionary형으로 바꿀 수 있다.

예제

L1 = [[1,2],[3,5],[6,4],[55,9]]
dic_L1 = dict(L1)
print(dic_L1)

출력

{1: 2, 3: 5, 6: 4, 55: 9}

이런식으로 길이가 2인 list n개로 이루어진 list를 dictionary형으로 변환할 경우, 각 리스트의 인덱스 0번째 값을 key로, 인덱스 1번째 값을 value로 하는 item이 n개인 dictionary가 생성된다.

위와 같은 코드를 구현하면 for문 두개를 돌릴 필요없이, if문만으로도 직관적인 코드 구현이 가능하다.

다른 풀이

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"

처음 보는 바다코끼리 연산자(:=)를 활용한게 신기해서 가져온 코드이다.

Python 3.8부터 바다코끼리 연산자 (:=)가 도입되었습니다. 저도 최근에 알게 된, 매우 생소한 연산자입니다. 간단히 말해, 할당과 반환을 동시에 하는 연산자입니다.

위 구문에서는 db_pw에 dict(db)안의 id_pw[0]를 할당하면서 반환한다.
근데 또 웃긴게, if db_pw := dict(db)[id_pw[0]] 으로 코드를 바꾸면 런타임 에러가 발생한다. . . .

아무래도 나는 쓸일 없는 연산자일듯하다.. ..어려움

profile
공부합시당

0개의 댓글