본문 바로가기
기초다지기/JS 코딩테스트

javascript 2차원 배열 내 리스트에 id, pw가 있는지 찾고 일치 여부에 따른 메세지 반환

by 김빵그 2023. 9. 12.

문제

회원들의 정보가 담긴 데이터베이스 db가 주어지고 유저(id_pw) 가 로그인 하려고 한다
아이디와 패스워드가 모두 일치하면 "login"
아이디는 일치하지만 패스워드가 일치하지 않으면 "wrong pw"
둘 다 없다면 "fail"

 

나의 코드 리뷰

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

1-1 for 

  • 데이터 베이스를 순회하기 위래 for 루프를 사용하여 회원 정보를 하나씩 확인한다

1-2 조건문

  • db[i][0] : 아이디와 확인 db[i][1] 비밀번호와 일치하는지 확인후 이에따른 텍스트 반환

 

다른 코드 풀이 1

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';
}
  • id_pw 배열에서 아이디와 비번을 추출하여 id와 pw 변수에 저장
  • db 배열을 Map 객체인 Map으로 변환한다
  • map.has를 사용하여 id가 map내에 존재하는지 확인 > 만약 존재하면 map.get(id)를 사용하여 해당 아이디에 저장된 비밀번호를 가져온다 가져온 비밀번호 pw와 입력한 비밀번호가 일치하면 "login" 반환

2-1 map has? get?

const myMap = new Map();
myMap.set('name', 'John');
console.log(myMap.has('name')); // true
console.log(myMap.has('age'));  // false
  • has(key) : key가 존재한다면 true, 없으면 false
  • get (key) : key가 map 객체안에 존재하지 않으면 undefined 반환
const myMap = new Map();
myMap.set('name', 'John');
const name = myMap.get('name');
console.log(name);  // 'John'

const age = myMap.get('age');
console.log(age);   // undefined

 

다른 코드 풀이 2

function solution(id_pw, db) {
    const [ userId, userPw ] = id_pw;
    for (const [ dbId, dbPw ] of db) {
        if (userId === dbId && userPw === dbPw) return "login";
        else if (userId === dbId && userPw !== dbPw) return "wrong pw";
    }
    return "fail";
}
  • userId, userPw 변수에 할당
  • db배열 각 요소를 dbId와 dbPw 변수에 분해할당한다
  • db 2차원 배열을 for...of 루프를 사용하여 순회