프로그래머스 (JS)/Lv. 0

[Programmers] 120883번 - 로그인 성공?

hodo- 2023. 3. 7. 22:32

Problem

문제 보기

머쓱이는 프로그래머스에 로그인하려고 합니다. 머쓱이가 입력한 아이디와 패스워드가 담긴 배열 id_pw와 회원들의 정보가 담긴 2차원 배열 db가 주어질 때, 다음과 같이 로그인 성공, 실패에 따른 메시지를 return하도록 solution 함수를 완성해주세요.

- 아이디와 비밀번호가 모두 일치하는 회원정보가 있으면 "login"을 return합니다.

- 로그인이 실패했을 때 아이디가 일치하는 회원이 없다면 “fail”를, 아이디는 일치하지만 비밀번호가 일치하는 회원이 없다면 “wrong pw”를 return 합니다.


Solution

function solution(id_pw, db) {
    let idpw = []
    
    for(let i = 0; i < db.length; i++){
        if(id_pw[0] !== db[i][0]) {idpw.push("fail")}
        else if(id_pw[1] !== db[i][1]){idpw.push("wrong pw")}
        else idpw.push("login")
    }
    
    return idpw.includes("login") ? "login" : idpw.includes("wrong pw") ? "wrong pw" : "fail"
}

입력 - id_pw (아이디, 패스워드) , db (회원정보)
배열, 2차원 배열로 들어옴

return -
1. 아이디O, 비번 O = "login"
2. 아이디 O, 비번 x  = "wrong pw"
3. 아이디x, 비번 x = "fail"

풀이-
3가지의 결과값을 for문 돌려서 배열에 넣어준다
return 우선순위를 login > wrong pw > fail 순으로 해서 삼항연산와 includes()이용해서 풀었다.

function solution(id_pw, db) {
  const [id, pw] = id_pw;
  const map = new Map(db);
  return map.has(id) ? (map.get(id) === pw ? 'login' : 'wrong pw') : 'fail';
}

map메서드는 항상 x.map(x => x*2) 이런 형태로만 써봤는데 위의 코드를 보고 Map에 대해 새롭게 알게 되었다.
map에 어떻게 저장되어있을지 궁금해서 콘솔창에 쳐보니

이렇게 저장되어있다. 그래서 map.get(id)하면 pw가 나오므로 id_pw의 pw와 비교할 수 있음을 알게 되었다! 

Map메서드는 2차원배열때 유용하게 쓸 수 있을 거 같다.