오늘은
벌써 10월입니다 날씨도 제법 쌀쌀해지고
추석도 다 지나갔습니다
프로그래밍 공부를 시작한지도 한달하고 일주일정도를 지났는데요
계획된 공부기간의 6분의 1이 지났습니다
최종목표의 6분의 1만큼 했는지는 아직 잘 모르겠습니다
위로 올라가기 위한 발판을 잘 닦는다는 마음가짐으로
조급해하지 않으려고 노력중입니다
JavaScript 공부
<this 키워드>
메서드에 있는 객체를 가리킬 때 this 키워드 사용
ex> const cat = {
name: 'Blue Steele',
color: 'grey',
breed: 'scottish fold',
meow() {
console.log("MEOW MEOW MEOW");
}
} // 출력 = MEOW MEOW MEOW
meow() {
console.log(`${this.name} says MEOWWW`);
}
} // 출력 = Blue Steele says MEOWWW
// 메서드에 this.특성이라고 쓰면 -> 이 메서드가 정의하는 객체를 가리키게 된다
const meow2 = cat.meow;
=> 메서드 호출 방식에 따라 this가 가리키는 객체가 항상 출력되는 것은 아니다
meow2() // 출력 = says MEOWWW
cat.moew() // 출력 = Blue Steele says MEOWWW
<try문, catch문>
= 별개의 구문이지만 항상 함께 일하며 JavaScript의 오류 및 예외를 처리한다
-> 코드 실행이 정지되거나 중단되지 않도록 하는 역할
ex> hello.toUpperCase(); // => Uncaught ReferenceError: hello is not defined 오류 발생
try{
hello.toUpperCase();
} catch {
console.log("ERROR!!!")
}
// console에 ERROR!!! 가 출력되면 코드가 정지되거나 중단되지 않는다
ex> function yell(msg) {
try {
console.log(msg.toUpperCase().repeat(3));
} catch (e) {
console.log(e);
console.log("Please pass a string next time!")
}
}
// try중괄호 안에서 오류가 발생하면 그게 무엇이든
// catch로 잡아내서 원하는 대로 처리할 수 있다
<배열 콜백 메서드>
forEach
Map
Some&Every
Allow Function(화살표 함수 = 함수 표현식을 정의하는 짧은 구문)
Filter
Reduce(고차 함수 = 배열 메서드에서 유용하지만 어려움)
등 안에 함수를 넣어줘야 하는 배열 메서드와 함께 쓰인다
배열 메서드 = 내장 메서드 -> JavaScript의 모든 배열에서 접점을 갖고 있다
배열 메서드 안에는 함수가 들어가야 한다
<forEach 메서드>
= 함수를 인수로 받아들인다
for of 루프가 등장하기 전에는 자주 쓰였었음
for Each는 배열안의 아이템 각각에 대해 함수와 코드를 한 번씩 실행한다
=> 어떤 함수를 넣든 상관없이 함수가 아이템별로 한 번씩 호출최고
각각의 아이템이 함수에 자동으로 전달
ex> const numbers = [1,2,3,4,5,6,7,8,9,10]
numbers.forEach(function (el) {
console.log(el)
}) // numbers의 요소를 각각 출력
= for (let el of numbers) {
console.log(el);
}
<Map 메서드>
= 콜백 함수를 수령해서 배열의 요소당 1번씩 실행한다 (= forEach와 비슷)
그 다음에 그 콜백의 반환 값을 이용해서 새로운 배열을 생성한다 (= forEach와 다름)
=> 배열을 다른 상태로 매핑하는 것
ex> const numbers = [1,2,3,4,5,6,7,8,9,10]
const doubles = numbers.map(funtion (num) {
return num * 2;
}
// 원래 배열인 numbers에 기반하여 만들어지는 배열
// = numbers 자체를 변경하지 않고 새로운 배열을 만들어
// 변수에 저장 (= doubles)
<화살표 함수(Arrow Function)>
= 기존의 함수나 기존의 함수 표현식보다 더 간결하다
function이라는 키워드 없이도 함수 입력 가능
ex> const add = function(x,y) {
return x + y;
}
function(x,y) {
return x + y;
} // 단독으로 존재할 수 없는 값이다 = 독립적인 함수로 지정 불가
// 변수(add)에는 저장 가능 = 인수에 전달해도 되고 반환도 가능
// 화살표 함수도 단독으로 만들 수 없다
const add = (x, y) => {
return x + y;
} // 전달될 인수가 하나뿐인 경우에는 (x뿐인 경우)
// 괄호를 생략해도 된다
const rollDie = ( ) => {
return Math.floor(Math.random() * 6) + 1
} // 결정할 인수나 매개변수가 없다해도 자리는 필요하기 때문에
// 괄호 안은 비워두어야 한다
* 암시적 반환 = 화살표 함수로만 쓸 수 있는 방법
특정 상황에서 return(반환) 키워드를 뺄 수 있다
ex> // const rollDie = ( ) => {
// return Math.floor(Math.random() * 6) + 1
// }
const rollDie = ( ) => (
Math.floor(Math.random() * 6) + 1
) // return키워드를 지우고 { }중괄호를 ( )괄호로 바꿔준다
const rollDie = ( ) => Math.floor(Math.random() * 6) + 1 // 한줄로도 가능하다
=> 암시적 반환에서 중요한 것 = 함수의 바디에 표현식이 딱 하나만 있어야 한다는 것
<setTimeout, setInterval>
= 실행을 연기하고, 대기하고, 중단하거나 하는 등 기본적으로 작업 일정을 정한다
* setTimeout()
=> 두 가지를 전달해줘야 한다 - 콜백
- 함수의 실행을 연기시킬 시간인 밀리 초의 숫자
ex> setTimeout(( ) => {
console.log("HELLO!!!")
}, 3000) // 3초 후에 HELLO!!! 출력
* setInterval()
=> 전달할 함수를 호출 -> 콜백을 매 특정 밀리 초 마다 호출하는 함수
= 인터벌을 두고 작업을 반복
ex> setInterval(( ) => {
console.log(Math.random( ))
}, 2000); // 2초의 텀을 두고 함수 호출을 반복 실행
* clearInterval()
=> 인터벌의 무한 반복을 중지시켜주는 역할
ex> const id = setInterval(( ) => {
console.log(Math.random( ))
}, 2000);
// -> console에 id를 입력하여 함수 실행
// -> clearInterval 호출 해당 ID를 전달
// => clearInterval(id) => 반복 중지
Coding Test Practice
Description
모든 자연수 x에 대해서 현재 값이 x이면 x가 짝수일 때는 2로 나누고, x가 홀수일 때는 3 * x + 1로 바꾸는 계산을 계속해서 반복하면 언젠가는 반드시 x가 1이 되는지 묻는 문제를 콜라츠 문제라고 부릅니다.
그리고 위 과정에서 거쳐간 모든 수를 기록한 수열을 콜라츠 수열이라고 부릅니다.
계산 결과 1,000 보다 작거나 같은 수에 대해서는 전부 언젠가 1에 도달한다는 것이 알려져 있습니다.
임의의 1,000 보다 작거나 같은 양의 정수 n이 주어질 때 초기값이 n인 콜라츠 수열을 return 하는 solution 함수를 완성해 주세요.
function solution(n) {
var answer = [];
while(n != 1){
answer.push(n);
if(n % 2 == 0){
n /= 2;
}else {
n = 3 * n + 1;
}
}
answer.push(1);
return answer;
}
Description
문자열 myString이 주어집니다. "x"를 기준으로 해당 문자열을 잘라내 배열을 만든 후 사전순으로 정렬한 배열을 return 하는 solution 함수를 완성해 주세요.
단, 빈 문자열은 반환할 배열에 넣지 않습니다
function solution(myString) {
var answer = [];
myString = myString.split("x")
for(var i = 0; i < myString.length; i++){
if(myString[i] != ""){
answer.push(myString[i])
}
}
return answer.sort()
}
Description
정수 n이 매개변수로 주어질 때, 다음과 같은 n × n 크기의 이차원 배열 arr를 return 하는 solution 함수를 작성해 주세요.
function solution(n) {
var answer = [];
// 배열 안에 배열 = 중첩 배열
for (var i = 0; i < n; i++) {
var inner = [];
for (var j = 0; j < n; j++) {
if (i == j) {
inner.push(1);
} else {
inner.push(0);
}
}
answer.push(inner);
}
return answer;
}
Description
우주여행을 하던 머쓱이는 엔진 고장으로 PROGRAMMERS-962 행성에 불시착하게 됐습니다. 입국심사에서 나이를 말해야 하는데, PROGRAMMERS-962 행성에서는 나이를 알파벳으로 말하고 있습니다.
a는 0, b는 1, c는 2, ..., j는 9입니다. 예를 들어 23살은 cd, 51살은 fb로 표현합니다.
나이 age가 매개변수로 주어질 때 PROGRAMMER-962식 나이를 return하도록 solution 함수를 완성해주세요.
function solution(age) {
var answer = '';
var alpha = "abcdefghij";
age = age.toString();
for(var i = 0; i < age.length; i++){
answer += alpha[age[i]];
}
return answer;
}
Description
문자열 배열 strArr가 주어집니다. 배열 내의 문자열 중 "ad"라는 부분 문자열을 포함하고 있는 모든 문자열을 제거하고 남은 문자열을 순서를 유지하여 배열로 return 하는 solution 함수를 완성해 주세요.
function solution(strArr) {
var answer = [];
for(var i = 0; i < strArr.length; i++){
if(!strArr[i].includes("ad")){
answer.push(strArr[i])
}
}
return answer;
}
2023. 10. 02 (월)
프로그래머 도전기 37일차 (0) | 2023.10.05 |
---|---|
프로그래머 도전기 36일차 (1) | 2023.10.04 |
프로그래머 도전기 34일차 (0) | 2023.10.01 |
프로그래머 도전기 33일차 (2) | 2023.09.30 |
프로그래머 도전기 32일차 (0) | 2023.09.29 |