View
문제 설명
머쓱이는 프로그래머스에 로그인하려고 합니다. 머쓱이가 입력한 아이디와 패스워드가 담긴 배열 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):
id, pw = id_pw[0], id_pw[1]
for i in db:
if i[0] ==id:
if i[1] ==pw:
return "login"
else:
return "wrong pw"
return "fail"
다른 풀이
dict(2차원리스트)
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()
내장 함수에 키워드 인자(rardss='123', yyoom='1234')나 터플(tuple) 리스트를 넘길 수도 있다.
db = [['rardss', '123'], ['yyoom', '1234'], ['meosseugi', '1234']]
print(dict(db))
// {'rardss': '123', 'yyoom': '1234', 'meosseugi': '1234'}
바다코끼리 연산자
한국어로는 바다코끼리 연산자로 불리는 Walrus Operator는 PEP 572에 Assignment Expressions이란 이름으로 정의되었다.
정식 명칭은 대입 표현식(Assignment Expression)이지만, 명명 표현식(Named Expression) 또는 바다코끼리 연산자(Walrus Operator)라고도 불린다.
:=가 바다코끼리의 눈과 엄니를 닮아 바다코끼리 연산자라고 불리게 되었다.
바다코끼리 연산자의 목적은 표현식(Expression)에 이름을 부여하고 재사용할 수 있게 하는 것이다.
지금까지 파이썬에서는 코드에서 표현식을 인라인(inline)으로 캡처하는 문법이 없었다.
예컨대, 파이썬 3.7 이하에서는 아래와 같이 코드를 작성해야 했다.
a = [1, 2, 3, 4]
n = len(a)
if n > 5:
print(f"List is too long ({n} elements, expected <= 5)")
len을 여러 번 호출하는 상황을 방지하기 위해, len의 출력값을 저장하는 변수 n을 사용하는데 라인 한 줄이 더 필요했다.
파이썬 3.8에서는 바다코끼리 연산자를 사용하면 아래와 같이 n을 조건문 안에서 선언하고 값을 대입할 수 있다.
a = [1, 2, 3, 4]
if (n := len(a)) > 5:
print(f"List is too long ({n} elements, expected <= 5)")
Reference
https://int-i.github.io/python/2020-05-29/python-walrus-operator/
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
programmers) 치킨 쿠폰 (0) | 2022.11.12 |
---|---|
programmers) 컨트롤 제트 (0) | 2022.11.12 |
programmers) 삼각형의 완성조건 (2) (0) | 2022.11.11 |
programmers) 유한소수 판별하기 (0) | 2022.11.11 |
programmers) 직사각형 넓이 구하기 (0) | 2022.11.10 |