알고리즘 풀이

[algorithm] 프로그래머스:입문 로그인 성공?

째깍단 2023. 4. 21. 23:07

답: 

더보기
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))

 

맨날 1점 받다가 13점 받으니 짜릿!

 

 

문제 분석 및 해석

 

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"

 

 

 

 

 


느낀점: 

 

추천받은 문제풀기 재밌다..헤헤