Javascript - 로그인 성공?

이율곡·2023년 7월 10일

Programmers

목록 보기
27/44
post-thumbnail

로그인 성공?

문제

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

  • 아이디와 비밀번호가 모두 일치하는 회원정보가 있으면 "login"을 return합니다.
  • 로그인이 실패했을 때 아이디가 일치하는 회원이 없다면 “fail”를, 아이디는 일치하지만 비밀번호가 일치하는 회원이 없다면 “wrong pw”를 return 합니다.

입출력 예

id_pwdbresult
["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"

접근방법

이 문제는 id_pw를 받고 db에 있는 것과 매칭하는 문제다. 핵심은 조건에 따른 값을 반환하는 것이기 때문에 크게 어려움은 없다. 나는 다음과 같은 접근 방법으로 풀었다.

  1. 로그인 실패로 초기화된 flag를 설정.
  2. 아이디와 비밀번호가 모두 일치하는 회원 정보가 있는지 확인.
  3. 아이디는 일치하지만 비밀번호가 일치하지 않는 회원 정보가 있다면 flag를 "wrong pw"로 변경.
  4. 로그인에 성공하지 못한 경우, flag의 상태를 반환.

풀이

function solution(id_pw, db) {
    let flag = 'fail';

    for (let i = 0; i < db.length; i++) {
        if (db[i][0] === id_pw[0]) {
            if (db[i][1] === id_pw[1]) {
                return 'login';
            } else {
                flag = 'wrong pw';
            }
        }
    }

    return flag;
}

접근방법대로 풀이를 풀었다. 처음 값을 초기화하고 조건에 때라 값을 바꿔 반환하게 했다.

이 문제를 풀고 다른 사람들의 풀이를 봤는데, map을 사용하던 풀이도 있었다. 그 점이 좀 더 효율적이라 생각이 들어, 기록에 남겨본다.

+) 다른 풀이

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를 구조분해하고 db를 map을 사용해서 새로운 배열을 만들고 map에서 id의 따라 값을 바꿔진다.


정리하기

이번 문제는 자주 사용되는 문제기 때문에 무난하게 풀 수 있었다. 내가 문제를 푸는 것도 중요하지만 다른 사람들의 풀이를 보면서 매일 더 배우는 거 같다.

profile
음악을 좋아하는 사람이 음악을 만들 듯, 개발을 좋아하게 될 사람이 쓰는 개발이야기

0개의 댓글