[algorithm] 프로그래머스:입문 로그인 성공?
답:
def solution(id_pw, db):
for i in range(len(db)):
if id_pw == db[i]:
print(id_pw)
print(db[i])
return "login"
elif id_pw[0] == db[i][0]:
print(id_pw[0])
print(db[i][0])
return "wrong pw"
else:
return "fail"
print(solution(id_pw, db))

문제 분석 및 해석
id pw가 담긴 배열 id_pw
회원 정보가 담긴 2차원배열 db : 원소 길이가 2
아이디 비번 일치 회원정보가 있으면 "login"을 return
로그인 실패시 아이디 일치 회원이 없으면 "fail"
아이디 일치, 비밀번호 일치 회원x "wrong pw"
입력 ["meosseugi", "1234"] <=리스트
db [["rardss", "123"], ["yyoom", "1234"], ["meosseugi", "1234"]]
출력 "login" <= 문자열 출력
1) 내가 생각한 풀이
리스트끼리 비교하는 연산자 ==을 사용하여
입력 리스트를 db[i]과 비교하여 같은 것 있는지 검사하여 True면 "login" return
elif로 위 값이 False면 db의 아이디를 꺼내어 비교
True면 "worng pw"
아이디 일치 회원이 없으면 Fail
"fail" 반환
과정1.
- 로그인 성공부분
def solution(id_pw, db):
for i in range(len(db)):
if id_pw == db[i]:
return "login"
print(solution(id_pw))
- 나머지 부분 작성
...
elif id_pw[0] == db[i][0]:
return "wrong pw"
else:
return "fail"
그런데 결과값은 계속 fail이 나온다.
다 풀고나니 이유를 알겠군 for문 안에 모든 것이 들어있어서야..
과정2. 오류를 해결하자
해결하기 위해 해본 방법1
else로 나누어보기
하지만 결국 elif로 한거랑 같은 결과값을 가져온다..ㅋㅋㅋ 삽질 한 번씩 꼭 하쥬,,,
def solution(id_pw, db):
...
return "login"
else:
if id_pw[0] == db[i][0]:
return "wrong pw"
else:
return "fail"
해결하기 위해 해본 방법2
print를 이용해 어디서 무슨일이 일어나고 있는지 찾기..
초반부는 출력이 잘 된다.
def solution(id_pw, db):
print(id_pw) #['meosseugi', '1234']
print(db) #[['rardss', '123'], ['yyoom', '1234'], ['meosseugi', '1234']]
for i in range(len(db)):
print(db[i]) # ['rardss', '123']
여기서 0번 요소만 나오고 for문이 멈추는 것을 발견!
for i in range(len(db)):
if id_pw == db[i]:
return "login"
else:
continue
하면 "login" 결과를 잘 가져온다.
그렇다면 이후에 문제가 있는 것이므로 변경해보자.
if문에서 false가 나오면 id를 검사하여 "wrong pw"가 나오도록 조정
elif id_pw[0] == db[i][0]:
print(id_pw[0]) # meosseugi
print(db[i][0]) # meosseugi
return "wrong pw" # 결과: "wrong pw"
방법 3
else에서 for문이 자꾸 끊기고
else로 빠져 끝나버리는 문제가 있다.
그러므로 for문이 끝나면 else 가 나오도록 수정하기
for i in range(len(db)):
...
else:
return "fail"
느낀점:
추천받은 문제풀기 재밌다..헤헤