오늘은 node.js 입문강의 2주차 내용을 듣는다. 새로운 내용을 배우니까 또 진도가 잘 나가지 않는다. level 1 과제도 진행해야하다보니까 어떤 식으로 접근해야할지가 가장 큰 고민인데, 오늘 기술 매니저님께 얘기를 하니,
강의를 처음에 전반을 다 이해하겠다는 마음보다는 강의를 들으면서 따라하면서 여기에 이렇게 쓰이구나 정도의 흐름을 이해하고 과제를 하면서 이해를 해보는 방향을 조금 더 추천해주셨다.
메타인지가 중요하다고 해서 이해하고 설명할 수 있을 정도로 했는데, 지금은 마감 시간을 지키는 것이 더 중요하니 일단 강의를 먼저 듣고, 실습부터 진행을 해봐야겠다.
오늘은 진도를 나가는데 더 급급해서
알고리즘 문제 2개 푼 풀이 내용을 공유한다.
오늘 프로그래머스 문제 2문제 풀이
문제 설명
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
제한조건
arr은 길이 1 이상인 배열입니다.
인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다
// 문제 : 정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
/**수도코딩
* 먼저 배열이 빈 배열이면 [-1]; 로 리턴하고,
* 배열의 가장 최소값을 제외한 내용만 배열에 넣어주면 된다. Math.min(...arr) ... spread 연산자를 써서 arr 복사
*/
function solution(arr){
let answer = [];
if (arr.length === 1){
return [-1];
}
for(let i = 0; i< arr.length; i++){
if(arr[i] !== Math.min(...arr)){
answer.push(arr[i]);
}
}
return answer;
}
let arr = [4, 3, 2, 1];
console.log(solution(arr));
// 다른 사람 풀이 삼항연산자 Math.min(...arr)을 변수에 저장
//filter 함수 공부
function solution2(arr) {
const min = Math.min(...arr);
return arr.length !== 1 ? arr.filter( i => i !== min) : [-1]
}
console.log(solution2(arr))
/** filter 함수 Array.prototype.filter()
* filter() 메서드는 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환
*/
// filter 예시
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter((word) => word.length > 6);
console.log(result);// [ 'exuberant', 'destruction', 'present' ]
문제설명
단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
제한사항
s는 길이가 1 이상, 100이하인 스트링입니다.
// 문제 : 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
/**수도코딩
* 문자열 s 를 배열로 반환하기 .split() 메서드
* 짝수, 홀수인 경우를 나눠서 짝수는 가운데 2글자가 반환되게, 홀수면 1글자가 반환되게
* Math.floor() 내림 메서드 사용
*/
function solution(s) {
let answer = '';
let words = s.split('');
if(s.length % 2 === 0){
answer = words[s.length/2 -1] + words[s.length/2]
} else answer = words[Math.floor(s.length/2)]
return answer;
}
let s = "abcde"; // "qwer"
console.log(solution(s)); // c \ we
// 다른 사람 풀이 substr() 메서드, 삼항연산자
/** substr() 메서드는 문자열에서 특정 위치에서 시작하여 특정 문자 수 만큼의 문자들을 반환
*/
// substr( , ) 처음에 지수자리부터 두번째는 글자수 (만약 두번째가 비어있으면 끝까지 반환)
// Math.ceil() -1 을 해 준 이유? 지수는 0부터 시작하기 때문에 맞춰줌
// 문자열의 길이가 홀 짝 인지에 따라 글자수만큼 반환
function solution1(s) {
return s.substr(Math.ceil(s.length/2) -1, s.length % 2 === 0 ? 2 : 1);
}
console.log(solution1(s)); //c
// substr() 메서드 예시
const str = 'Mozilla';
console.log(str.substr(1,2)); // oz
console.log(str.substr(2)); //zilla