23년 1월 3주차 코드리뷰 진행함
function solution(numlist, n) {
let sortedList = numlist.sort((a,b) => {
const [absA, absB] = [Math.abs(a-n), Math.abs(b-n)]
if(absA === absB) return b-a
return absA-absB
})
return sortedList
}
//1번 테스트 실패한 풀이
function solution(id_pw, db) {
const id = id_pw[0]
const pw = id_pw[1]
// const idRegex = new RegExp(id,"g")
// const pwRegex = new RegExp(pw,"g")
// console.log(idRegex.test("meosseugi"))
const result = db.map((e,idx) => {
// return idRegex.test(e[0]) ? (pwRegex.test(e[1]) ? "login" : "wrong pw") : "fail"
const testId = e[0];
const testPw = e[1];
const idRegex = new RegExp(testId,"g")
const pwRegex = new RegExp(testPw,"g")
if( e[0] === "" || e[1] === "") {
return "fail"
}
else if (idRegex.test(id) === true) {
return pwRegex.test(pw) === true ? "login" : "wrong pw"
}
else if(idRegex.test(id) === false ){
return "fail"
}
})
console.log(result)
if (result.indexOf("login") >= 0){
return "login"
}
else if(result.indexOf("login") < 0 ) {
return result.indexOf("wrong pw") >= 0 ? "wrong pw" : "fail"
}
}
// 두번째 접근 방식
function solution(id_pw, db) {
let result = ''
for (const element of db){
if(id_pw[0] === element[0] && id_pw[1] === element[1]){
result = "login"
break;
}
else if(id_pw[0] === element[0] && id_pw[1] !== element[1]){
result ="wrong pw"
break;
}
else {
result="fail"
}
}
return result
}
result
배열에 특정 요소가 존재하는지의 여부를 통해 최종 리턴값을 결정하기로함login
인 인덱스가 존재한다면 login
으로, 없다면, wrong pw
가 존재할때 wrong pw
, 둘다 없는 경우에는 fail
을 리턴하게 함이와 같은 방식으로 접근을 했지만, 첫번째 테스트케이스에서 실패가 나왔음. 조사 결과 map대신에 for break를 사용해보기로함. map은 도중에 멈출수가 없고 for break같은 경우는 특정 상황에 멈출수 있기 때문에 변수를 최소화 시킬수 있다고 판단하여 다른 방식으로 접근했다.
result
선언 후 db의 요소를 for of 를 통해서 id_pw
와 비교 작업을 실시함login
의 값을 result
에 넣어준다.worng pw
를 넣어주고 그 외에는 전부 fail을 넣어준다.무작정 for문을 배척할 것이 아니라 경우에 맞게 반복 메서드를 사용하는것이 바람직 하다고 생각했다.
프로그래머스 코딩 테스트 문제풀이 20일차 완료
lv.0 문제풀이 100% 달성
사용자가 이진수 문자열을 2개 입력하면 그 둘을 더한 값을 이진수 문자열로 반환하는 함수를 구현하는 것이다.
// 이진법으로 표기된 문자열을 십진법으로 변경해서 숫자로 변경하는 메서드
function changeDecimal(bin){
return [...bin].reverse().reduce((a,c,idx) => {
return a + Number(c) * 2 ** idx
},0)
}
// 십진법으로 표기된 숫자를 이진법으로 변경하는 메서드
function changeBinary(dec) {
let bin = []
if(dec === 0) {
bin.push(dec)
}
while(dec > 1){
bin.push(dec % 2)
dec = Math.floor(dec / 2 )
if (dec === 1){
bin.push(dec)
break;
}
}
return bin.reverse().join("")
}
function solution(bin1, bin2) {
let dec1 = changeDecimal(bin1)
let dec2 = changeDecimal(bin2)
return changeBinary(dec1 + dec2)
}
해결 방법은 입력한 2개의 이진법 문자열을 각각 십진법의 자연수로 변경하고, 그 둘을 더한 값을 다시 이진법으로 표기하는 메서드를 호출해서 이진수로 변경하는 과정이다.
100문제의 코딩테스트 문제를 풀어가면서 확실하게 늘어난 것은 바로 자바스크립트 내장 객체 함수를 사용하는 능력이다. 이전 같았으면, for,if로 덕지덕지 되었을텐데, 지금은 그런 빈도가 많이 줄어들었다.
사용할수 있는 메서드의 종류가 늘어나면서 문제 해결을 위해 접근하는 방식이 더욱 늘어나게 된 점도 아주 좋았다.
비록 제일 낮은 난이도의 문제들로 구성되었지만, 더 난이도 있는 문제를 마주해도 맨 처음의 자신보다는 더 달려들수 있는 마음가짐이 생겨서 뿌듯했다.