머쓱이는 프로그래머스에 로그인하려고 합니다. 머쓱이가 입력한 아이디와 패스워드가 담긴 배열
id_pw
와 회원들의 정보가 담긴 2차원 배열db
가 주어질 때, 다음과 같이 로그인 성공, 실패에 따른 메시지를 return 하도록 solution 함수를 완성해 주세요.
- 회원들의 아이디는 문자열입니다.
- 회원들의 아이디는 알파벳 소문자와 숫자로만 이루어져 있습니다.
- 회원들의 패스워드는 숫자로 구성된 문자열입니다.
- 회원들의 비밀번호는 같을 수 있지만 아이디는 같을 수 없습니다.
id_pw
의 길이는 2입니다.id_pw
와db
의 원소는 [아이디, 패스워드] 형태입니다.- 1 ≤ 아이디의 길이 ≤ 15
- 1 ≤ 비밀번호의 길이 ≤ 6
- 1 ≤
db
의 길이 ≤ 10db
의 원소의 길이는 2입니다.
id_pw | db | result |
---|---|---|
["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" |
import java.util.HashMap;
class Solution {
public String solution(String[] id_pw, String[][] db) {
HashMap <String, String> h = new HashMap<>();
for(int i = 0; i < db.length; i++)
{
h.put(db[i][0], db[i][1]);
}
if(h.containsKey(id_pw[0]))
{
if(h.get(id_pw[0]).equals(id_pw[1]))
return "login";
else return "wrong pw";
}
else
return "fail";
}
}
💡 HashMap을 이용해 key를 아이디로 두고, value를 패스워드로 두었으며 db 배열에 저장된 아이디와 패스워드를 HashMap에 저장한 후, HashMap에 찾고자 하는 아이디인 id_pw[0]이 있는지 확인하고, 없으면 "fail"을 retrun 하게 함
💡 만약에 HashMap에 id_pw[0]와 일치하는 아이디가 저장되어 있다면, 그때 key(아이디)의 value와 일치하는 패스워드가 있다면 "login"을 return 하게 하고, 아이디는 일치하지만 패스워드는 없다면 "wrong pw"을 return 할 수 있게 해 줌
💡 처음엔 단순 if문 조합으로 코드를 짰었는데 이상하게 테스트 케이스 1에서만 자꾸 오류가 나서 HashMap으로 다시 짜게 되었다 정확하지는 않지만 if문으로만 코드를 짤 때는 그냥 db에 있는 아이디와 id_pw[0]이 일치한지 확인한 후, 그 if문 안에서 db에 있는 패스워드와 id_pw[1]을 비교해 일치하는지 확인했었는데 예외가 있었던 것 같다 HashMap으로 바꾸면서 get()을 사용하면서 key에 해당하는 value와 일치할 때만 "login"을 return 해 주면서 모든 케이스를 통과할 수 있었던 것 같다