Lami
삶이 온통 사람의 길이니
Lami
전체 방문자
오늘
어제
  • 분류 전체보기 (165)
    • Elice (1)
      • 회고록 (1)
    • Git (0)
    • HTML ▪ CSS (4)
    • JavaScript (7)
      • BOJ (2)
      • Programmers (0)
      • Study Note (5)
    • TypeScript (0)
    • React (21)
      • Lecture (19)
      • Study Note (2)
    • Python (44)
      • CodeUp (38)
      • Programmers (0)
      • Study Note (6)
    • Modern Agile (80)
      • Tech Talk (7)
      • TIL (73)
    • 문제해결 (1)
    • 회고록 (5)
    • 도란도란 (2)

블로그 메뉴

  • Github

공지사항

  • 👋 안녕하세요!

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Lami

삶이 온통 사람의 길이니

Day 03 - 2021.12.08
Modern Agile/TIL

Day 03 - 2021.12.08

2021. 12. 8. 17:55

과제 03

https://github.com/wooahan-agile/coding-test-study-3term/pull/37

 

문자열 다루기 기본

https://programmers.co.kr/learn/courses/30/lessons/12918

  • 정규표현식 사용
  • Number()를 이용하려 했으나 Number() 사용 시 e도 지수로서 숫자로 변환이 가능하기 때문에 테스트를 통과하지 못했다. 추가적으로 조건을 더 붙이려고 했지만 코드가 점점 더러워지는 것을 보고 멘토의 도움을 받아 접근 방식을 정규표현식으로 바꾸어 풀었다.
function solution(s) {
  const check = /[^0-9]/g;
  return (s.length === 4 || s.length === 6) && !check.test(s) ? true : false;
}

 

리뷰

  • 정규 표현식 활용 굿
  • 변수 선언한 후에 for문이나 다른 기능을 하는 코드가 있다면 공백 한 줄 주기

 

 

수정 코드

function solution(s) {
  const check = /[^0-9]/g;

  return (s.length === 4 || s.length === 6) && !check.test(s) ? true : false;
}

 

 

자릿수 더하기

https://programmers.co.kr/learn/courses/30/lessons/12931

function solution(n) {
  const strN = String(n);
  let answer = 0;
  for (let i = 0; i < strN.length; i++) {
    answer += Number(strN[i]);
  }
  return answer;
}

리뷰

  • 변수 선언한 후에 for문이나 다른 기능을 하는 코드가 있다면 공백 한 줄 주기

 

 

수정 코드

function solution(n) {
  const stringN = String(n);
  let answer = 0;

  for (let i in stringN) {
    answer += Number(stringN[i]);
  }
  return answer;
}
  • 다른 문제에서 for in문 리뷰를 받아서 수정해보았다.

 

 

K번째수

https://programmers.co.kr/learn/courses/30/lessons/42748

function solution(array, commands) {
  let answer = [];
  let sliceSortArr = [];
  for (let i = 0; i < commands.length; i++) {
    sliceSortArr = array
      .slice(commands[i][0] - 1, commands[i][1])
      .sort((a, b) => {
        return a - b;
      });
    answer.push(sliceSortArr[commands[i][2] - 1]);
  }
  return answer;
}

 

리뷰

  • 배열 자체가 재할당되는 일이 없다면 const로 선언하기
  • 변수 선언한 후에 for문이나 다른 기능을 하는 코드가 있다면 공백 한 줄 주기
  • for in 문 사용해보기
  • 화살표 함수에서 하나의 식만 있을 경우 return 생략 가능!

 

 

수정 코드

function solution(array, commands) {
  const answer = [];
  let sliceSortArr = [];

  for (let i in commands) {
    sliceSortArr = array
      .slice(commands[i][0] - 1, commands[i][1])
      .sort((a, b) => a - b);
    answer.push(sliceSortArr[commands[i][2] - 1]);
  }
  return answer;
}

 

 

두 개 뽑아서 더하기

https://programmers.co.kr/learn/courses/30/lessons/68644

function solution(numbers) {
  let answer = [];
  let uniqueAnswer = [];

  for (let i = 0; i < numbers.length - 1; i++) {
    for (let j = i + 1; j < numbers.length; j++) {
      answer.push(numbers[i] + numbers[j]);
    }
  }

  answer = answer.sort((a, b) => {
    return a - b;
  });

  uniqueAnswer = answer.filter((element, index) => {
    return answer.indexOf(element) === index;
  });

  return uniqueAnswer;
}

 

리뷰

  • 배열 자체가 재할당되는 일이 없다면 const로 선언하기
  • 화살표 함수에서 식이 하나라면 return 생략 가능!
  • 메서드를 이어서 사용할 수 있는 메서드 체이닝 방식 이용하기 ⇒ uniqueAnswer 배열 필요 없어짐

 

 

수정 코드

function solution(numbers) {
  const answer = [];

  for (let i = 0; i < numbers.length - 1; i++) {
    for (let j = i + 1; j < numbers.length; j++) {
      answer.push(numbers[i] + numbers[j]);
    }
  }

  return answer
    .sort((a, b) => a - b)
    .filter((element, index) => answer.indexOf(element) === index);
}

 

 


TIL

Number()

  • 문자열로 표현한 숫자를 숫자로 변환해주는 함수이다.
  • 영어 e도 지수로서 숫자 변환이 가능하다.

 

정규표현식

  • 특정 패턴의 문자열을 찾기 위한 표현 방식
  • https://curryyou.tistory.com/234

 

indexOf()

  • 포함하고 있는 문자의 첫번째 인덱스를 반환
  • 만약 문자를 가지고 있지 않는다면 -1 반환
// 포함하고 있는 문자 찾을 때
const arrDays = ['월','화','수'];
const strDays = '월화수';
console.log(arrDays.indexOf('화')); // 1
console.log(strDays.indexOf('목')); // -1

 

filter()

  • 특정 조건에 부합하는 배열의 모든 값을 배열 형태로 리턴
  • SQL문의 where절 생각하면 됨
  • IndexOf()와 같이 사용하면 중복되지 않은 값만 추출 가능
const n = [1,3,2,4,2,3];
const a = n.filter((element, index) => {
  return n.indexOf(element) === index;
});
console.log(a); // [1,3,2,4]

코드 설명

return n.indexOf(element) === index;
// indexOf는 포함하고 있는 값의 첫번째 인덱스를 반환한다.
// n을 순회하면서 각 원소의 첫번째 인덱스가 n에서의 인덱스와 같은지 확인한다.

n.filter((element, index) => {}
// 필터를 통해 함수를 실행하고 true만 가져온다.

// 그렇기 때문에 a를 출력하면 중복된 값이 제거되고 [1,3,2,4]가 나온다.
// 1, 3, 2, 4는 중복되지 않은 첫번째 값이므로 각각 인덱스가 0, 1, 2, 3이 되고
// 1, 3, 2, 4 뒤에 나오는 2, 3은 중복된 값이므로 indexOf를 거치면 
// 현재 인덱스 값이 아닌 첫번째 값을 가져와 2, 1이 된다.
// 이를 현재 인덱스 값과 비교하면 4, 5이므로 다른 값이 되기 때문에 false를 반환하고
// filter()를 통해 true 값만 가져오므로 추출대상에서 제외된다.

 

sort()

  • 파라미터로 정렬 순서를 정의하는 함수를 넣지 않는다면 유니코드순으로 정렬된다는 점 잊지 말자!
// 오름차순
sort((a, b) => a - b);

// 내림차순
sort((a, b) => b - a);

 

메서드 체이닝

  • 메서드가 객체를 반환하게 되면 메서드의 반환 값인 객체를 통해 또 다른 함수를 호출할 수 있다.
  • 이러한 프로그래밍 패턴을 매서드 체이닝이라 부른다.
  • https://velog.io/@seungsang00/JavaScript-Method-Chaining

 

화살표 함수

  • 함수 안에서 하나의 식으로 return하는 경우 return 생략 가능
const add1 = (a, b) => {
  return a + b;
};

console.log(add1(1, 2));

// 위 코드와 결과가 같다.
const add2 = (a, b) => a + b;
console.log(add2(1, 2));

 

null과 undefined의 차이

  • null : 없다고, 고의적으로 설정한 값
  • undefined : 설정하지 않았기 때문에, 없는 값

 

논리연산자의 연산 순서

  • NOT → AND → OR

 

==와 ===의 차이

  • ==는 타입 검사를 하지 않는다.
  • == 사용 시 숫자 1과 문자열 '1'은 동일한 값
  • == 사용 시 0과 false는 동일한 값
  • == 사용 시 undefined와 null은 같은 값
  • 결론 : ==가 아니라 ===를 사용하자!

 


Lesson Learned

잘한 점

  • filter()와 indexOf()를 같이 써서 중복된 값 제외하고 추출하는 코드를 이해하기 위해 오랜 시간 동안 붙잡았고, 결국에는 이해를 해서 어떤 과정을 통해 그런 결과가 나오는지를 정리할 수 있게 됐다!

아쉬운 점

  • 메서드들이 파이썬과 비슷한 듯 달라서 할 때마다 찾느라 시간이 오래 걸렸다 ㅜ.ㅜ 머릿속에 얼른 다 들어왔음 좋겠다😭

배운 점

  • 문자열에 여러 조건을 써야 한다면 정규표현식을 사용하는 것이 훨 간편하다는 것을 알게 되었다! 많은 조건을 달았어야 해서 코드가 전체적으로 너무 지저분해졌는데 정규표현식을 이용하니 코드가 너무 간편해졌다,,
  • 과제 중 두 개 뽑아서 더하기 문제 푸는데 메서드를 연결하고 싶었으나 식이 한 줄이 아니라 이을 수 없을 거라 생각했었다. 근데 웬걸 화살표 함수에서 식이 하나라면 return을 없애고 한 줄로 쓸 수 있다니...! 문제를 풀 수록 재밌는 것을 많이 알아간다😆

'Modern Agile > TIL' 카테고리의 다른 글

Day 06 - 2021.12.13  (0) 2021.12.13
Day 05 - 2021.12.10  (0) 2021.12.10
Day 04 Tech Talk Day🎤 - 2021.12.09  (2) 2021.12.09
Day 02 - 2021.12.07  (0) 2021.12.07
Day 01 - 2021.12.06  (1) 2021.12.06
    'Modern Agile/TIL' 카테고리의 다른 글
    • Day 05 - 2021.12.10
    • Day 04 Tech Talk Day🎤 - 2021.12.09
    • Day 02 - 2021.12.07
    • Day 01 - 2021.12.06
    Lami
    Lami
    성장하는 즐거움을 알아가는 중입니다🌱

    티스토리툴바