저장을 습관화
프로그래머스 LV.0 로그인 성공? 본문
프로그래머스 LV.0 로그인 성공?
https://school.programmers.co.kr/learn/courses/30/lessons/120883
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제 명
로그인 성공?
2. 문제 설명
머쓱이는 프로그래머스에 로그인하려고 합니다. 머쓱이가 입력한 아이디와 패스워드가 담긴 배열 id_pw와 회원들의 정보가 담긴 2차원 배열 db가 주어질 때, 다음과 같이 로그인 성공, 실패에 따른 메시지를 return하도록 solution 함수를 완성해주세요.
아이디와 비밀번호가 모두 일치하는 회원정보가 있으면 "login"을 return합니다.
로그인이 실패했을 때 아이디가 일치하는 회원이 없다면 “fail”를, 아이디는 일치하지만 비밀번호가 일치하는 회원이 없다면 “wrong pw”를 return 합니다.
3. 제한 사항
- 회원들의 아이디는 문자열입니다.
- 회원들의 아이디는 알파벳 소문자와 숫자로만 이루어져 있습니다.
- 회원들의 패스워드는 숫자로 구성된 문자열입니다.
- 회원들의 비밀번호는 같을 수 있지만 아이디는 같을 수 없습니다.
- id_pw의 길이는 2입니다.
- id_pw와 db의 원소는 [아이디, 패스워드] 형태입니다.
- 1 ≤ 아이디의 길이 ≤ 15
- 1 ≤ 비밀번호의 길이 ≤ 6
- 1 ≤ db의 길이 ≤ 10
- db의 원소의 길이는 2입니다.
4. 예시
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" |
5. 기본 제공 코드
function solution(id_pw, db) {
var answer = '';
return answer;
}
6. 제출한 내 답
const solution = (id_pw, db) => {
for (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] && db[i][1] !== id_pw[1]) {
return "wrong pw";
}
}
return "fail";
};
정확성 테스트
테스트 1 〉 통과 (0.05ms, 33MB)
테스트 2 〉 통과 (0.04ms, 33.5MB)
테스트 3 〉 통과 (0.05ms, 33.1MB)
테스트 4 〉 통과 (0.05ms, 33.4MB)
테스트 5 〉 통과 (0.05ms, 33.4MB)
테스트 6 〉 통과 (0.04ms, 33.5MB)
테스트 7 〉 통과 (0.04ms, 33.5MB)
테스트 8 〉 통과 (0.04ms, 33.6MB)
채점 결과
정확성: 100.0
합계: 100.0 / 100.0
6-2. VSC에 작성한 내용
const solution = (id_pw, db) => {
// 아이디 패스워드가 모두 일치하면 "login"
// 아이디가 일치하지 않다면 "fail",
// 아이디가 일치하지만 패스워드가 일치하지 않다면 "wrong pw"
for (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] && db[i][1] !== id_pw[1]) {
return "wrong pw";
}
}
return "fail";
};
// 테스트
console.log(
solution(
["meosseugi", "1234"],
[
["rardss", "123"],
["yyoom", "1234"],
["meosseugi", "1234"],
]
)
);
console.log(
solution(
["programmer01", "15789"],
[
["programmer02", "111111"],
["programmer00", "134"],
["programmer01", "1145"],
]
)
);
console.log(
solution(
["rabbit04", "98761"],
[
["jaja11", "98761"],
["krong0313", "29440"],
["rabbit00", "111333"],
]
)
);
7. 특이사항
사실 이 풀이법도 정확히 따져보면 틀려야 맞는거다
만약 DB 배열안에 id는 일치하나 pw가 일치하지 않는 요소가 먼저 나오고,
id와 pw가 일치하는 요소가 그 다음에 나온다면 result는 "login"이 되어야 하나
내 풀이법대로하면 "worng pw"가 나올 것이다.
틀릴것을 예상하고 채점을 우선 돌려봤으나 통과되었다.
8. 다른 사람이 작성한 답
8-1. 가장 많이 쓰인 풀이법, 좋아요를 가장 많이 받은 풀이법, 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';
}
8-2.
function solution(id_pw, db) {
db = db.filter(v=>v[0]===id_pw[0]);
if (!db.length) return 'fail';
for (let d of db) if (d[1] === id_pw[1]) return 'login';
return 'wrong pw';
}
'코딩 테스트 > 프로그래머스 - 자바스크립트' 카테고리의 다른 글
프로그래머스 LV.0 최빈값 구하기 (0) | 2024.02.02 |
---|---|
프로그래머스 LV.1 K번째 수 (0) | 2023.10.08 |
프로그래머스 LV.1 크기가 작은 부분문자열 (0) | 2023.10.03 |
프로그래머스 LV.1 이상한 문자 만들기 (0) | 2023.10.03 |
프로그래머스 LV.0 배열 조각하기 (0) | 2023.10.03 |