알고리즘 풀이 1)6-10번
function solution(a){
let oddArray = [];
a.map(num => {
if(num%2===1) oddArray.push(num);
})
let answer_min = oddArray.sort((a,b)=>a-b)[0];
let answer_sum = oddArray.reduce((acc,cur)=>acc+cur)
return `${answer_sum}
${answer_min}`;
}
arr=[12, 77, 38, 41, 53, 92, 85];
console.log(solution(arr));
// ----------강의풀이-----------
//제일큰값 변수에 지정해놓고 비교하면서 작은 값으로 바꾸기
//이중 if문으로 누적값과 최솟값 동시작업 하기
function solution2(arr){
let sum=0, min=Number.MAX_SAFE_INTEGER;
for(let num of arr){
if(num%2 === 1){
sum += num;
if(num<min){
min = num;
}
}
}
return `${sum}
${min}`;
}
arr=[12, 77, 38, 41, 53, 92, 85];
console.log(solution2(arr));
reduce함수 처리하면서 첫번째 값을 다른 변수에 저장해놓고 동시에 첫번째부터 누산하는 방법은 없을까 고민하느라
의외로 엄청 시간을 보내버렸다. reduce 쓰는법 그새 다 까먹었나보다....
function solution(date, arr){
let violation = 0;
for(let i=0; i<arr.length; i++){
if(String(arr[i]).charAt(1)===String(date)) violation++;
}
return violation;
}
//------------강의풀이-----------
//십진수를 10으로 나누면 일의자리만 나머지로 남는다!
function solution2(date, arr){
let answer = 0;
for(let num of arr){
if(num%10===date) answer ++;
}
return answer;
}
console.log(solution2(3, [25, 23, 11, 47, 53, 17, 33]));
console.log(solution2(0, [12, 20, 54, 30, 87, 91, 30]));
숫자.toString() vs String(숫자) 가 순간 헷갈려서 검색했는데 알고보니 내가 블로그에 정리해놓고 까먹어버리기ㅎㅎ
나는 직관적으로 두번째 인덱스로 확인했는데 풀이에선 수학적으로 풀었다.
function solution(arr){
let answer=arr;
let sum=answer.reduce((a, b)=>a+b, 0);
for(let i=0; i<8; i++){
for(let j=i+1; j<9; j++){
// 전체 SUM 에서 가짜난쟁이 둘 빼서 100인 경우 구하기
if((sum-(answer[i]+answer[j]))==100){
answer.splice(j, 1);
answer.splice(i, 1);
}
}
}
return answer;
}
console.log(solution([20, 7, 23, 19, 10, 15, 25, 8, 13]));
2일차 만에 너무어려운 문제가 나와서 머리가 터질뻔...
우선 전체 합을 구하고 SUM에서 두 난쟁이를 빼가면서 100이 되는 경우를 구하는 방법으로 풀이해줬다.
배열에서 splice로 가짜를 제거하는데 앞에서부터 제거하면 그 순간 뒤에있는 요소의 인덱스번호가 바뀌니까
뒤에있는 요소의 인덱스부터 사용해서 제거하는 방법이 새로운 발상이였다.
음.. 그렇지만 다시봐도 어렵다 .
function solution(str){
return str.replace(/A/g,"#")
}
console.log(solution('BANANA'));
//--------강의풀이------
function solution2(str){
let answer ="";
for( char of str){
if(char === 'A') answer +='#';
else answer += char;
}
return answer;
}
console.log(solution2('BANANA'));
모든 문자열을 바꾸는 방법으로 정규식 외에 떠오르지않았는데
강의에서 다른 방법도 소개해주었다.
빈 문자열인 변수 선언해두고 for문으로 비교하면서 문자 채우기.
문자열을 합치는 가장 좋은 방법은 + 연산자(효율이 좋음). 그 외 concat(), join(), 템플릿 리터럴도 있음. (*push()불가)
function solution(str,char){
let count=0;
for(let i=0; i<str.length; i++){
if(str[i]===char) count++;
}
return count;
}
console.log(solution('COMPUTERPROGRAMMING','R'));
//----------강의풀이-----
//풀이1. for문 대신 for(...of..)문
//풀이2. 문자를 기준으로 split
function solution(str,char){
let answer=s.split(t).length;
return answer-1;
}
console.log(solution('COMPUTERPROGRAMMING','R'));
신박했던 강의 풀이.
특정 문자를 기준으로 문자열을 자르고 배열에 담은 다음, 배열의 길이 -1로 해당 문자의 개수를 유추하는 방법.
-> 자르는 문자가 맨 마지막 문자면?? 마지막에 빈문자열이 요소로 들어가므로 배열의 길이-1은 동일하다.
전반적으로 강의에서 일반 for문보다 for(..of..)문을 많이 사용한다.
코드가 훨씬 간단해져서 익혀둬야겠다고 생각했다.