문제

머쓱이는 프로그래머스에 로그인하려고 합니다.
머쓱이가 입력한 아이디와 패스워드가 담긴 배열
id_pw와 회원들의 정보가 담긴 2차원 배열 db가 주어질 때,
다음과 같이 로그인 성공, 실패에 따른 메시지를 return하도록
solution 함수를 완성해주세요.
아이디와 비밀번호가 모두 일치하는 회원정보가 있으면 "login"을 return합니다.
로그인이 실패했을 때 아이디가 일치하는 회원이 없다면
“fail”를, 아이디는 일치하지만 비밀번호가 일치하는 회원이
없다면 “wrong pw”를 return 합니다.

내 코드

public String solution(String[] id_pw, String[][] db) {
        String answer = "";
        for (int i = 0; i < db.length; i++) {
            if (id_pw[0].equals(db[i][0])) {
                if (id_pw[1].equals(db[i][1])) {
                    answer = "login";
                    break;
                } else {
                    answer = "wrong pw";
                    break;
                }
            } else {
                answer = "fail";
            }
        }
        return answer;
    }

풀이

먼저 입력받은 아이디와 db의 아이디 목록들을 비교한다.
만약 있다면 그 아이디에 저장된 비밀번호와 아이디의 비밀번호를 비교하고 값을 저장한다.
처음에 break를 작성하지 않아 반복문을 다시 돌아 다음거와 비교해서 fail로 가게 되는 경우가 발생해서 실패했었다.
반복문에서 무언가를 탐색할때 다찾을때 break를 해서 무의미한 반복을 하지 않도록 해주자.

다른 코드

public static String solution(String[] id_pw, String[][] db) {
        String answer = "";
        Map<String, String> map = new HashMap<>();
        for (String[] str : db) {
            map.put(str[0], str[1]);
        }
        if (map.containsKey(id_pw[0])) {
            if (map.get(id_pw[0]).equals(id_pw[1])) {
                answer = "login";
            } else {
                answer = "wrong pw";
            }
        } else {
            answer = "fail";
        }

        return answer;
    }

다른 풀이

map을 사용해서 푸는 것이다. map에 각 배열을 키와 값으로 저장한다.
2차원배열을 for문으로 작성하면 그 밑의 배열들이 나오는 것을 이용하는 것을 깨닫게 되었다.
이후 주어진 배열의 아이디가 존재한다면? 키에서 밸류값을 얻어와서 비교하면된다.

+ Recent posts