알고리즘 2일차
어제와 같은 하루같은 느낌을 받았다.
문제를 해결하기 위한 머리속 지식을 쥐어 짜내보아도 내 답은 항상 틀리기 일수였다.
그러나 진전은 있다.
첫날에는 for문 한줄쓰고 답안을 봤는데 오늘은 개인 공책에 for문과 if문을 섞어가며 코드를 글로 작성 후 테스트를 시도하였다.
위에 적혀있듯 틀린답안만 나왔지만 중간중간 내가 생각한 방법이 맞는 경우도 있었다 다만 구현을 못했을뿐
TIL은 오늘 하루 배운것을 기록하는거지만 그동안 너무 일기처럼 쓰였으니 오늘부터 배웠던 것들을 되새김하는 시간은 갖도록 하겠다.
function solution(phone_number) {
var answer = '';
return answer;
}
프로그래머스에서 문제를 풀기 위한 초기 답안지이다.
저기서 var answer = '';/ [ ]; /[[ ]]; 이런 경우를 보게 되는데 왜 선언만 해두는지 이해가 되지 않았는데 동료가 알려줘서 깨달았다.
차례대로 문자열/ 배열 / 행렬을 미리 선언하는 것으로 확인되었다.
map() 메서드는 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환합니다.
const array1 = [1, 4, 9, 16];
// pass a function to map
const map1 = array1.map(x => x * 2);
console.log(map1);
// expected output: Array [2, 8, 18, 32]
arr.map(callback(currentValue[, index[, array]])[, thisArg])
새로운 배열 요소를 생성하는 함수. 다음 세 가지 인수를 가집니다.
처리할 현재 요소.
처리할 현재 요소의 인덱스.
map()을 호출한 배열.
callback을 실행할 때 this로 사용되는 값.
배열의 각 요소에 대해 실행한 callback의 결과를 모은 새로운 배열.
-곱하거나 더하기 등 리듀스와 비슷하게 사용된다.
reduce() 메서드는 배열의 각 요소에 대해 주어진 리듀서(reducer) 함수를 실행하고, 하나의 결과값을 반환합니다.
const array1 = [1, 2, 3, 4];
const reducer = (previousValue, currentValue) => previousValue + currentValue;
// 1 + 2 + 3 + 4
console.log(array1.reduce(reducer));
// expected output: 10
// 5 + 1 + 2 + 3 + 4
console.log(array1.reduce(reducer, 5));
// expected output: 15
arr.reduce(callback[, initialValue])
배열의 각 요소에 대해 실행할 함수. 다음 네 가지 인수를 받습니다.
누산기는 콜백의 반환값을 누적합니다. 콜백의 이전 반환값 또는, 콜백의 첫 번째 호출이면서 initialValue를 제공한 경우에는 initialValue의 값입니다.
처리할 현재 요소.
처리할 현재 요소의 인덱스. initialValue를 제공한 경우 0, 아니면 1부터 시작합니다.
reduce()를 호출한 배열.
callback의 최초 호출에서 첫 번째 인수에 제공하는 값. 초기값을 제공하지 않으면 배열의 첫 번째 요소를 사용합니다. 빈 배열에서 초기값 없이 reduce()를 호출하면 오류가 발생합니다.
누적 계산의 결과 값.
-모든값을 더하거나 곱할때 for /if 보다 사용한다.
fill() 메서드는 배열의 시작 인덱스부터 끝 인덱스의 이전까지 정적인 값 하나로 채웁니다.
const array1 = [1, 2, 3, 4];
// fill with 0 from position 2 until position 4
console.log(array1.fill(0, 2, 4));
// expected output: [1, 2, 0, 0]
// fill with 5 from position 1
console.log(array1.fill(5, 1));
// expected output: [1, 5, 5, 5]
console.log(array1.fill(6));
// expected output: [6, 6, 6, 6]
arr.fill(value[, start[, end]])
배열을 채울 값.
시작 인덱스, 기본 값은 0.
끝 인덱스, 기본 값은 this.length.
변형한 배열.
-주로 * 채우기에서 봤다.
for...in문은 상속된 열거 가능한 속성들을 포함하여 객체에서 문자열로 키가 지정된 모든 열거 가능한 속성에 대해 반복합니다. (Symbol로 키가 지정된 속성은 무시합니다.)
const object = { a: 1, b: 2, c: 3 };
for (const property in object) {
console.log(`${property}: ${object[property]}`);
}
// expected output:
// "a: 1"
// "b: 2"
// "c: 3"
파이썬 반복문과 같은 for in 이다. 내가 받아들이기에도 비슷한 기능을 하고있다 생각되며 자바스크립트의 for문보다 간결하다.
forEach() 메서드는 주어진 함수를 배열 요소 각각에 대해 실행합니다.
const array1 = ['a', 'b', 'c'];
array1.forEach(element => console.log(element));
// expected output: "a"
// expected output: "b"
// expected output: "c"
arr.forEach(callback(currentvalue[, index[, array]])[, thisArg])
각 요소에 대해 실행할 함수. 다음 세 가지 매개변수를 받습니다.
처리할 현재 요소.
처리할 현재 요소의 인덱스.
forEach()를 호출한 배열.
thisArg Optional
callback을 실행할 때 this로 사용할 값.
undefined.
ForEach또한 for문보다 간결하며 반복되는게 자주 쓰일거 같다.
g
정규식에 g플래그가 포함되어 있으면,
일치는 객체가 아닌 일치하는 하위 문자열을 포함하는 Array를 반환하고
일치하는 것이 없으면
null이 반환
i
i가 대소문자를 무시하는 플래그기 때문이다.
/ ~~ /
슬래쉬 사이에 모든글을 찾는다.
/[문자 알파벳 숫자 등등]/g
문자 - 가
알파벳 - a
숫자 - 1
이렇게 지정해두면 해당 글을 찾는다.
여기서 대괄호는 or의 기능을 한다.
/[^0~9]/g
숫자 0~9가 아닌 모든것을 찾는다.
대괄호 안에서 앞에 ^을 쓰면 부정(not)의 기능을 한다.
다만 대괄호가 없을 때 ^을 쓰면 특정문자열로 시작이라는 기능을 한다.
d
숫자를 찾는다.
대문자 D는 숫자가 아닌것을 찾는다.
그외에도 정규표현식은 굉장히 많다.
프로그래머스 문제를 풀때 종종 보이곤 했는데 이제서야 뜻을 파악했고
회원가입 ID PW 입력할 때 어떻게 쓰이는지 이해가 간다.
내일은 일요일이라 항해는 쉬는날이지만 조금이라도 나와서 복습 혹은 예습을 해야겠다.