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

gayoung·2023년 2월 11일
0

알고리즘

목록 보기
34/50

1. 문제

문제 설명

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

2. 풀이 과정

내가 생각한 진행 과정

  • 아이디 일치, 비번 일치 -> login
  • 아이디 일치, 비번 불일치 -> wrong pw
  • 아이디 불일치, 비번 불일치 -> fail
    • 이때 if (id.equals(db[i][0])) {login, wrong pw} else {fail}해버리면 만약, db 길이가 1이면 이미 id, pw에 들어가있고, equals에서 비교할 게 없기때문에 answer=""인 채로 return되어 fail이 나오지 않는 에러발생
    • 따라서 answer != login && answer != wrong pw 이면 fail
    • 또는 for문 다 돈 후에 최종적으로 answer=""이면 fail return

최종 코드

public String solution(String[] id_pw, String[][] db) {
        String id = id_pw[0];
        String pw = id_pw[1];

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

                // 에러! 이런경우에 만약에 db길이가 1인데, id가 일치하지않으면 위에 if문에서 answer=""가 됨
                // } else {
                //     answer = "fail";
                // }

                // 방법1. login, wrong pw아니면 fail
                //    } else {
                //        if (!answer.equals("login") && !answer.equals("wrong pw")){
                //            answer = "fail";
                //         }
                //    }
            }
        }

        // 방법2. 최종적으로 login, wrong pw가 아니라 ""이면 fail
        if (answer.equals("")) {
            answer = "fail";
        }
        return answer;
    }

3. 알게된 것

  • 예외케이스 확인 잘하기!

0개의 댓글

관련 채용 정보