본문 바로가기
하루하루/프로그래머스 문제풀이

[Lv.0 - Java] 120883. 로그인 성공?

by 키튼햄 2023. 12. 25.

문제

https://school.programmers.co.kr/learn/courses/30/lessons/120883

 

 

 

풀이

사용자가 입력한 아이디와 비밀번호가 String[] id_pw 배열 안에 들어가고, 데이터베이스에 들어가 있는 회원정보 중 일치하는 것이 있다면 각기 상황에 맞춰 login, wrong pw, fail 문자열 중 반환해야한다.

 

1. 먼저 id_pw 배열 속의 사용자가 입력한 아이디와 비밀번호를 각각 변수에 저장한다. 비교하기 쉽도록.

2. db 속의 각 회원 정보를 전부 확인하기 위해 for문을 사용한다.

3. db는 2차원 배열이고, 아이디와 비밀번호가 한 묶음으로 묶였기 때문에 인덱스는 아이디는 0, 비밀번호는 1이다. 따라서 반복문을 돌때의 현재 회원 정보의 아이디와 비밀번호를 String dbId, dbPw 변수에 각각 `member[0]` 과 `member[1]` 의 값을 저장한다.

4. 현재의 회원정보 (dbId, dbPw)의 값이 사용자가 입력한 회원정보(inputId, inputPw)가 일치하는지 확인하기 위해 if문과 .equals() 메소드를 사용하여 값의 일치여부를 확인한다.

아이디와 비밀번호가 둘다 일치하면 "login" 문자열을 반환. 

아이디만 일치하고, 비밀번호는 일치하지 않으면 "wrong pw" 문자열을 반환

둘다 일치하지 않으면 "fail" 문자열을 반환

 

 

요류와 해결

class Solution {
    public String solution(String[] id_pw, String[][] db) {
        String inputId = id_pw[0];
        String inputPw = id_pw[1];
        
        for(String[] member : db){
            String dbId = member[0];
            String dbPw = member[1];
            
            if(dbId.equals(inputId)&&dbPw.equals(inputPw)){
                return "login";
            } else if(dbId.equals(inputId)&&!dbPw.equals(inputPw)){
                return "wrong pw";
            } else{
                return "fail";
            }
        }
    }
}

 

오류

 

오류가 발생한 이유  >>  내가 처음 작성한 코드에서는 for문 루프 내에서 조건을 만족하는 경우에 즉시 함수에서 반환하게 되어있다. 이 때문에 처음에 설정한 String[] member의 member 반복을 모두 마치기 전에 함수가 종료된다. 따라서 마지막 return "fail" 코드에 도착하지 않아서 컴파일 오류가 발생하기 때문에 테스트가 성공적이지 못한 것이었다.

 

따라서 마지막 return "fail" 값을 for문 밖으로 빼내서 코드를 다시 작성했다.

 

 

정답코드

class Solution {
    public String solution(String[] id_pw, String[][] db) {
        String inputId = id_pw[0];
        String inputPw = id_pw[1];
        
        for(String[] member : db){
            String dbId = member[0];
            String dbPw = member[1];
            
            if(dbId.equals(inputId)&&dbPw.equals(inputPw)){
                return "login";
            } else if(dbId.equals(inputId)&&!dbPw.equals(inputPw)){
                return "wrong pw";
            }
        }
        return "fail";
    }
}

 

결과