#2주
1주차 미니 웹 프로젝트를 마치고 새로 조편성을 받고, 알고리즘 주간이 시작되었다. 알고리즘 자체를 거의 처음으로 접해보는거라 걷기반을 신청했는데, 부지런히 해서 달리기반이 푸는 문제도 풀도록 해야겠다.
이번주는 메소드를 사용하거나, 풀면서 어려웠던 문제들을 대상으로 리뷰해보고자 한다.
2번
정수 num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하는 함수, solution을 완성해주세요.
제한 조건
- num은 int 범위의 정수입니다.
- 0은 짝수입니다.
function solution(num) {
var answer = '';
if (num%2 ==0) {
return ("Even")
} else{
return ("Odd")
}
return(answer)
}
# %2를 통해 나머지가 0이면 짝수, 1이면 홀수임을 도출
4번
문제 설명
두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.
function solution(a, b) {
if (a>b) {
return (a+b)*(a-b+1)/2}
else{
return (b+a)*(b-a+1)/2}
}
#가우스 덧셈을 활용해 정수의 합 구하기
a가 더 클 조건, b가 더 클 조건 나누지 않고 절댓값을 구하는 Math.abs()를 통해 코드정리 가능
function solution(a, b) {
return (a+b)*(Math.abs(a-b)+1)/2
}
8번
문제 설명
정수를 담고 있는 배열 arr의 평균값을 return하는 함수, solution을 완성해보세요.
function solution(arr) {
let answer = 0;
answer= (arr.reduce((previousvalue,currnetvalue) => (previousvalue+currnetvalue)))/arr.length
return(answer);
}
#reduce 메소드를 사용한 배열의 덧셈.
1. reduce 는 배열의 모든 요소를 왼쪽부터 끝까지 탐색하는 반복 함수이다.
2. 첫번째 인자에는 내부 함수의 리턴값이 저장된다. (설정하지 않았을때는 배열의 첫번째 값)
3. 두번째 인자에는 내부 요소들이 하나씩 차례대로 담긴다.
9번
function solution(phone_number) {
let answer='*'.repeat(phone_number.length-4)+phone_number.slice(-4)
return answer;
}
#배열의 요소의 위치를 반영할때 -i를 사용하여 표기
14번
array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.
function solution(arr, divisor) {
let answer = [];
for(let i=0; i < arr.length; i++) {
if(arr[i] % divisor === 0) answer.push(arr[i]);
}
answer = answer.length === 0 ? [-1] : answer.sort((a,b) => a-b);
return answer;
}
#삼항 조건 연산자
condition ? exprIfTrue : exprIfFalse
<참조> https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Conditional_Operator
18번
문제 설명
String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.
function solution(seoul) {
for (i=0; i<seoul.length; i++) {
if(seoul[i] === "Kim")
answer= `김서방은 ${i}에 있다`
}
return answer
}
#문제가 어렵지는 않았고, ``(백틱)을 활용해서 안에 외부변수를 쉽게 반영할 수 있다는 것을 배운 문제.
26번
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
function solution(arr) {
let answer = [];
for(let i = 0; i< arr.length; i++ ){
if(Math.min(...arr)!==arr[i]) {
answer.push(arr[i])
}else if(arr.length<=1) {
answer.push(-1)
}
}
return answer;
}
#Math.min(...arr)을 사용하면 배열의 가장 작은 숫자를 자동으로 반환
#else if 는 if else 구문에서 중간에 사용하여 다른 조건을 추가할 수 있음.
#이번주차 핵심과 마무리
- ES란? (ECMAScript)
javascript/ JScript가 브라우저 시장 점유율을 위해 자사 브라우저에서만 동작하는 기능들을 추가하면서 크로스브라우징 이슈가 발생
이를 해결하기 위해 ECMA(표준화기구)에 자바스크립트 표준화를 의뢰해서 만들어진 범용 표준언어.
- ES5/ES6 문법 차이
1. let, const 키워드 추가
block scope를 가진 let과 const가 추가됨. 변경 통제 가능해짐.
2. arrow 문법 지원
코드 간결화 가능
3. 템플릿 리터럴
백틱을 사용하면 문자열 데이터를 플레이스 홀더(${variable})를 사용하여 문자열과 함께 표현식 반영 가능
4. 모듈(import/ export)
ES5에서는 각 기능별로 js파일을 나누고 개발, 관리하는 것이 불가능했으나
ES6에서는 import/ export로 모듈 관리가 가능해졌다.
5. this
자신을 둘러싸고 있는 this를 바라보기 때문에 따로 바인딩이나 변수에 담을 필요 없다.
- 알고리즘 주차 마무리
처음 접한 알고리즘은 언어를 모르는 나라, 새로운 도시에 떨어진 듯한 느낌이었다. 그래도 힘이 되었던 건 같이 문제를 풀어나갈 수 있는 조원들이 3명이나 있었다는 사실. 조원들과 문제를 해결하고 각자 맡은 문제들을 풀이하고 다른 방법들을 공유하면서 아 이런 방법도 있구나, 이렇게도 간단하게 만들어낼 수 있구나를 느꼈던 것 같다. 알고리즘 주간은 비록 마무리 되었지만, 프로그래머스에 있는 추가적인 문제들도 해결하고, 궁금한 점은 구글링을 하거나 질문을 하면서 알고리즘 문제를 추가적으로 해결하는 계획을 세우고 실천해야겠다.
'개발 > 항해99' 카테고리의 다른 글
항해99-6주차 기록(미니프로젝트) (0) | 2022.07.31 |
---|---|
항해99-5주차 기록(주특기 숙련 -React) (0) | 2022.07.24 |
항해99-4주차 기록(주특기 심화-React) (0) | 2022.07.17 |
항해99-3주차 기록(주특기 입문-React) (0) | 2022.07.07 |
항해99-1주차 기록(미니 웹 프로젝트) (0) | 2022.06.20 |