프로그래밍 기초 주에서는 javascript를 이용해서 코딩테스트 문제를 풀어보고 모의고사를 진행하게 된다. 본 모의고사를 보기 전에 연습으로 제공하는 코딩테스트 문제를 풀어보고 풀이영상을 제출해 봤다.
1번 문제는 날짜를 입력하면 98일을 더해준 날짜를 출력해주는 문제였다.
const solutionOne = (month, day) => {
let endDate = new Date(2022, month, day);
endDate.setDate(endDate.getDate() + 99);
console.log(endDate);
return endDate.getMonth().toString() + '월' + endDate.getDate().toString() + '일';
};
console.log(solutionOne(1, 7));
// 출력 4월 17일
Date
객체를 이용해 날짜 정보를 받아오고 99일을 더한 날짜에서 '월'과 '요일'을 출력했다.
2번 문제는 경과한 시간(?)을 계산해주는 문제였는데, 조건은 새벽 5시 (29시)이상이면 21시로 계산해주는 문제였다. check in 시간과 check out 시간이 각각 array로 주어진다.
const solutionTwo = (checkin, checkout) => {
let timeArray = []; // 값을 넣을 빈 배열을 선언한다.
for (let i = 0; i < checkin.length; i++) {
// for문을 사용해 checkin, checkout 배열을 각각 돌려준다.
if (checkout[i] >= 29) {
// 만약 checkout 시간이 새벽 5시(29시)를 넘어갈 경우 21시를 고정으로 빼준다.
timeArray.push(21 - checkin[i]); // 뺀 값을 timeArray 배열에 넣는다.
} else {
// 그 외의 경우는 checkout을 잘 한 것이므로 checkin의 값애서 checkout을 뺀다.
timeArray.push(checkout[i] - checkin[i]); // 뺀 값을 timeArray 배열에 넣는다.
}
}
return timeArray.reduce((a, b) => a + b); // 넣었던 값들을 모두 합해준다.
};
let arr1 = [9, 9, 9, 9, 7, 9, 8];
let arr2 = [23, 23, 30, 28, 30, 23, 23];
// result : 102
console.log(solutionTwo(arr1, arr2));
check out
시간에서check in
시간을 빼주어서 경과한 시간을 계산한 다음timeArray
에 넣어준다음,reduce()
를 사용해 배열의 값을 다 더해주고 리턴해주었다.
3번 문제는 주어진 문자열에서 소수 중 최댓값과 소수가 아닌 수 중 최솟값을 찾는 문제였다.
function solutionThree(s) {
let dataArray = s.split(' ');
dataArray.map((a, i) => (dataArray[i] = +a));
// 소수가 아닌 수들 배열에 넣기
let decimal = [2]; // 2는 기본적으로 소수이고, 소수의 최대값을 찾는 문제이기 때문에 default로 넣음
let notDecimal = [];
for (let i = 0; i < dataArray.length; i++) {
for (let j = 2; j < dataArray[i]; j++) {
if (dataArray[i] % j === 0) {
notDecimal.push(dataArray[i]);
break;
}
}
}
// 전체 배열과 소수가 아닌 수들을 비교해서 소수 찾아내기
dataArray.concat(notDecimal).filter((a) => {
if (!dataArray.includes(a) || !notDecimal.includes(a)) {
decimal.push(a);
}
});
// 소수의 최대값, 소수가 아닌 최소값 찾아서 출력
const decimalMax = Math.max(...decimal);
const notDecimalMin = Math.min(...notDecimal);
return String(notDecimalMin) + ' ' + String(decimalMax);
}
let s = '97 75 88 99 95 92 73';
console.log(solutionThree(s));
뭔가 더 간단하게 풀 수 있었을 것 같은데 복잡하게 푼 것 같아 아쉬웠다. 그리고 조금 복잡하더라도 각 기능마다 함수로 분리해서 풀었다면 좀 더 깔끔했을 것 같다.
일단 소수가 아닌 수들을 찾아내서 소수가 아닌 수들을notDecimal
배열에 넣고 원래의 배열과 중복을 찾아내 소수를 찾아냈고, 소수들을 다시decimal
배열에 넣어주었다. 그리고 각decimal
배열에서 최댓값과notDecimal
배열에서 최솟값을 찾아내 리턴해주었다.