Algorithm JS | 프로그래머스 코딩테스트_로그인 성공?

앙두·2023년 5월 19일
0

Algorithm

목록 보기
7/17

📑 문제

  • id_pw 는 아이디와 패스워드가 들어있는 배열 (length: 2)
  • db 는 회원정보배열이 들어있는 배열 (원소형태 : [아이디, 패스워드])
  • id 는 소문자+숫자 / 1 ~ 15
  • pw 는 숫자 / 1 ~ 6
  • id, pw 둘 다 db에 있다면, 'login' 반환
  • id는 있는데 pw가 없다면, 'wrong pw' 반환
  • id가 없다면, 'fail' 반환

🤓 나의 풀이

문제 이해는 금방 했는데, 1시간 반 씨름함 ^^
풀기는 3-40분만에 푼 것 같은데, return 을 계속 console.log 로 해주고 있어서 계속 실패가 떴었다 ... 어쩐지 ...
분명 runJS에서는 잘 출력되긴 되는데, returnconsole.log 인 게 뭔가 헐렁한 느낌이 있었음.

반환값은 무조건 변수에 할당해서 return을 변수로 해줄 것 !!!!
역시나 탄탄하지 못한 기초의 빈 틈에 빠지고 말았다

function solution(id_pw, db) {
    const res = db.find(el => el[0] === id_pw[0]);

    let result = '';

    res == undefined ? result = 'fail' :
    res[1] === id_pw[1] ? result = 'login' : result = 'wrong pw'

    return result;
}

resultstring 을 할당하지 않고 계속 console.log('fail') 이렇게 해주고 있었음 ㅜㅜ
아무튼 12점이나 얻었다 !!! 잘 풀었나보다 쿠쿸킼켘콬 😎

👍🏻 제일 간단한 풀이 (다른 사람들의 풀이 참고)

이 문제는 풀이 방법이 되게 다양했다.
나는 find() 메서드를 사용했다.
내 기준, 더 간단하고 쉬운 풀이를 참고해보겠다.

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";
}

나는 잘 안 써 본 for of 문을 사용하셨다.
그리고 무엇보다, 저렇게 배열 구조분해할당 좀 써먹고 싶은데, 많이 써보질 않아서 생각이 안난다. ㅜㅜ
괜춘티비 ~ 한번 두번 보다 보면 쓰게될테야!
아무턴가네 코드가 직관적이고 깔끔해보인다. 이해하기도 쉽다. (중요)

🤔 return 자체를 string 자체로 할 수도 있군

암튼 꽤~~나 헷갈리는 문제였다.


💫 리팩토링

  • 🤓 BEFORE
function solution(id_pw, db) {
    const res = db.find(el => el[0] === id_pw[0]);

    let result = '';

    res == undefined ? result = 'fail' :
    res[1] === id_pw[1] ? result = 'login' : result = 'wrong pw'

    return result;
}

  • 😎 AFTER
function solution(id_pw, db) {
    const [id, pw] = id_pw;
    const res = db.find(el => el[0] === id);
    
    return res ? res[1] === pw ? 'login' : 'wrong pw' : 'fail'
}

와... 뤼팩터륑하니 훨씬 간결 ...
끗!


profile
쓸모있는 기술자

0개의 댓글