문제 설명
머쓱이는 프로그래머스에 로그인하려고 합니다. 머쓱이가 입력한 아이디와 패스워드가 담긴 배열 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_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" |
입출력 예 #1 : db에 같은 정보의 계정이 있으므로 "login"을 return합니다.
입출력 예 #2 : db에 아이디는 같지만 패스워드가 다른 계정이 있으므로 "wrong pw"를 return합니다.
입출력 예 #3 : db에 아이디가 맞는 계정이 없으므로 "fail"을 return합니다.
나의 풀이
import java.util.HashMap;
class Solution {
public String solution(String[] id_pw, String[][] db) {
String id = id_pw[0];
String pw = id_pw[1];
HashMap<String, String> dbMap = new HashMap<>(); // 매개변수 이름을 사용하면 안됨 db -> dbMap
// 중첩 for문 로직 오류(로그인 정보는 [id, pw]쌍이므로 j 반복은 불필요)
/*
for(int i = 0; i < db.length; i++)
for(int j = 0; j < db[0].length; j++)
db.put(db[i][j], db[i][j]);
*/
for (int i = 0; i < db.length; i++)
dbMap.put(db[i][0], db[i][1]);
// containsValue(pw) 로직은 올바르지 않음
// 예: "kim" → "1234"인데, "lee"가 "1234"여도 containsValue는 true가 되어버림.
// dbMap.get(id).equals(pw)를 사용해야 정확히 그 ID에 해당하는 PW가 맞는지 확인 가능.
// 그리고 혹시라도 위 if-else if들이 전부 false일 수도 있으면 그럼 return 못 하니까 오류
// 즉, 모든 경로에서 return이 보장되지 않음
/*
if(dbMap.containsKey(id) && dbMap.containsValue(pw)){
return "login";
}
else if(dbMap.containsKey(id) && !(dbMap.containsValue(pw))) {
return "wrong pw";
}
else if(!(dbMap.containsKey(id))) {
return "fail";
}
*/
if (dbMap.containsKey(id)) {
if (dbMap.get(id).equals(pw)) {
return "login";
} else {
return "wrong pw";
}
} else {
return "fail";
}
// 위 코드는 아래처럼 삼항연산자로도 가능
/*
if (dbMap.containsKey(id)) {
return dbMap.get(id).equals(pw) ? "login" : "wrong pw";
} else {
return "fail";
}
*/
}
}
2차원 배열로 푼 다른 풀이
class Solution {
public String solution(String[] id_pw, String[][] db) {
String answer = "";
for(int i = 0; i < db.length; i++){
if(db[i][0].equals(id_pw[0])){
if(db[i][1].equals(id_pw[1])){
return "login";
}
return "wrong pw";
}
}
return "fail";
}
}
'👨💻 Coding Test > Programers' 카테고리의 다른 글
[Programmers/Java/Lv.1/수학] 25.정수 제곱근 판별 (0) | 2025.05.06 |
---|---|
[Programmers/Java/Lv.1/구현] 24.실패율(2019 KAKAO BLIND RECRUITMENT) (0) | 2025.05.01 |
[Programmers/Java/Lv.1/구현] 23.두 개 뽑아서 더하기 (1) | 2025.04.25 |
Programmers/Java/Lv.2/수학 유형] 1.행렬의 곱셈 (0) | 2025.04.25 |
[Programmers/Java/Lv.1/문자열 유형] 22.정수 내림차순으로 배치하기 (0) | 2025.04.14 |