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

삶이 온통 사람의 길이니

Modern Agile/TIL

Day 02 - 2021.12.07

2021. 12. 7. 19:56

과제 02

 

과제 제출 후 코드리뷰 받았지만 실수록 삭제했던...

https://github.com/wooahan-agile/coding-test-study-3term/pull/24/commits/9017d1f02a26e7efb9a50ce8c34bb900336350e2

코드 수정 후 다시 받은 리뷰

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

 

수박수박수박수박수?

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

function solution(n) {
    let answer = '';
    let plusW='';
    for (let i=0; i<n; i++) {
        plusW = (i%2 == 0) ? '수' : '박';
        answer += plusW;
    }
    return answer;
}

 

리뷰

  • plusW 변수명보다 명시적인 네이밍 필요
  • ==보다는 ===사용하기

 

수정 코드

function solution(n) {
  let answer = "";
  let addWord = "";
  for (let i = 0; i < n; i++) {
    addWord = i % 2 === 0 ? "수" : "박";
    answer += addWord;
  }
  return answer;
}

 

리뷰

  • 변수명은 명사로 지어야 함. addWord 처럼 동사가 먼저 나오는 경우는 보통 함수명에 사용
  • ex) suBak
addWord = i % 2 === 0 ? "수" : "박";
answer += addWord;
// 위 두 줄을 아래 한 줄로 바꿔서 쓴다면 addWord라는 변수 필요x
(i % 2) === 0 ? answer += "수" : answer += "박";

 

문자열 내림차순으로 배치하기

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

function solution(s) {
  let answer = "";
  let arr = [];
  let strArr = [];
  for (let i = 0; i < s.length; i++) {
    arr.push(s.charCodeAt([i])); // 아스키코드로 바꿔서 배열arr에 저장
  }
  arr.sort(function (a, b) {
    return b - a;
  }); // arr에 원소들 내림차순으로 정렬
  arr.forEach((num) => {
    strArr.push(String.fromCharCode([num]));
  }); // 아스키 코드를 다시 문자로 바꿔서 배열strArr에 저장
  strArr.forEach((str) => {
    answer += str; // 배열에 있는 문자들을 꺼내서 문자열로 만들기
  });

  return answer;
}

 

리뷰

  • 배열 자체가 바뀌는 것이 아니라면 const로 선언하기
  • 배열 arr이 함수 내에서 어떤 역할을 하는지 명확한 네이밍 필요
  • function 사용보다 화살표 함수 사용하기
  • 주석은 코드를 봐도 그 코드가 어떤 기능을 하는지 모를 때 사용하는 용도이므로 주석 사용 자제하기, 주석을 사용하지 않아도 알아보기 쉽도록 코드 작성하기
  • 현재 코드 효율성 떨어짐. 아스키코드 활용보다 sort메서드와 reverse메서드 이용해서 반복문 사용을 줄이도록 하기

 

수정 코드

function solution(s) {
    let answer = "";
    const stringArr = s.split("").sort().reverse();
    answer = stringArr.join("");
  return answer;
}

 

리뷰

let answer = "";
const stringArr = s.split("").sort().reverse();
answer = stringArr.join("");
return answer;
// 위 4줄을 아래 한 줄로 쓸 수 있음
return s.split("").sort().reverse().join("");

 

가운데 글자 가져오기

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

function solution(s) {
  let answer = "";
  if (s.length % 2 == 0) {
    answer = s.substr([s.length / 2 - 1], 2);
  } else {
    answer = s[parseInt(s.length / 2)];
  }
  return answer;
}

 

리뷰

  • 삼항연산자 사용하기
  • ==보다 ===사용
  • 함수 내에서 굳이 변수를 선언할 필요가 없는 경우 바로 return하기

 

수정 코드

function solution(s) {
  return s.length % 2 === 0
    ? s.substr([s.length / 2 - 1], 2)
    : s[parseInt(s.length / 2)];
}

 

두 정수 사이의 합

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

function solution(a, b) {
  let answer = 0;
  if (a < b) {
    for (let i = a; i <= b; i++) {
      answer += i;
    }
  } else {
    for (let i = b; i <= a; i++) {
      answer += i;
    }
  }

  return answer;
}

 

리뷰

  • 조건식을 사용하지 않고 푸는 방법 생각해보기

 

수정 코드

  • 등차수열의 합 공식 사용
function solution(a, b) {
  const maxNum = Math.max(a, b);
  const minNum = Math.min(a, b);
  return ((maxNum - minNum + 1) / 2) * (maxNum + minNum);
}

TIL

문자열 중 하나를 선택해 아스키 코드로 변환

"문자열".charCodeAt([문자열 자릿수])

 

아스키 코드를 문자열로 변환

String.fromCharCode([아스키코드값]);

 

sort()

  • 정렬 순서를 정의하는 함수를 파라미터로 입력 받는다.
  • 만약 파라미터 함수가 없을 시 배열의 원소들은 문자열로 취급되어, 유니코드 값 순서대로 정렬된다.
  • 파라미터 함수가 없다면 숫자도 문자열 정렬하듯이 정렬된다. ex) 결과가 [1, 11, 2, 22]
  • 문자열 정렬 시 대문자가 소문자보다 앞에 오도록 정렬된다. → 유니코드가 대문자가 소문자보다 앞에 있기 때문

 

forEach

  • 배열 내장 함수
let days = ["mon", "tue", "wed"];

days.forEach(day => {
  console.log(day);
});

// "mon"
// "tue"
// "wed

 

자바스크립트 나눗셈 몫 정수

  • 자바스크립트는 파이썬과 다르게 나눗셈에서 몫만 구할 수 있는 연산이 없다.
  • 몫만 구하고 싶을 때는 나누기를 하고 parseInt를 이용해 정수형으로 변환한다.
let result = parseInt(14 / 4); // 3

 

substr

  • 파이썬 인덱스 슬라이싱과 비슷한 기능의 메소드
  • 기존 문자열의 start 위치에서 length만큼 문자열을 반환한다.
  • length는 옵션이므로 생략이 가능하지만 생략한다면 문자열의 start 위치부터 문자열의 끝까지 추출하여 반환한다.
const txt = "Hello";
console.log(txt.substr(2)); // "llo"
console.log(txt.substr(0, 2)); // "He"

 

join()

  • 배열의 모든 값들을 연결한 문자열 리턴
  • 파라미터로 구분자를 입력하지 않으면 기본적으로 ','가 들어간다.
const days = ["mon", "tue", "wed"];

console.log(days.join()); // "mon,tue,wed"

console.log(days.join('-')); // "mon-tue-wed"

console.log(days.join('')); // "montuewed"

 

함수

  • 읽기 쉽고 어떤 동작인지 알 수 있게 네이밍
showError // 에러를 보여줌
getName // 이름을 얻어옴
createUserData // 유저데이터 생성
checkLogin // 로그인 여부 체크

 

메소드

  • 객체 프로퍼티로 할당된 함수
  • 아래 예시에서 fly가 메소드
const superman = {
  name : 'clark',
  age : 33,
  fly : function(){
    console.log('날아갑니다.')
  }
}

superman.fly(); // 날아갑니다.

 

배열에서 반복문

  • for ... in보다 for ... of가 더 적합함
let days = ["mon", "tue", "wed"];

days.push("thu");
days.unshift("sun");

for (let day of days) {
  console.log(day);
}

// "sun"
// "mon"
//  ...

Lesson Learned

잘한 점

  • 프로그래머스 문제 푸는 과제를 할 때 어떤 식으로 코드를 짜야겠다 하는 것이 머릿속으로 그려졌고, 그렇게 생각한 대로 코드를 구현해서 맞추자 너무 뿌듯했다. 코드업 문제를 풀면서 여러 문제를 접했던 것이 도움이 된 것 같다😁

아쉬운 점

  • 파이썬 내장함수와 자바스크립트 내장함수가 헷갈린다. 자바스크립트 문법을 어느정도 공부한 후 블로그에 정리해서 올려야겠다는 생각이 들었다.
  • 명시적인 변수명... 어떻게 짓는 것이 좋을까? 다른 사람들의 풀이를 보며 네이밍을 어떻게 했는지 보고 배워야겠다.
  • 내장 함수를 알고 있다면 삥 돌아가는 풀이를 하지 않아도 되는구나... 문제를 풀면서 알게 되는 함수들을 잘 정리해야겠다.
  • 깃을 다루지 못해서 pr을 보냈던 브랜치에 다시 pr 보내는 방법을 몰라 작은 문제가 생겼었다. 이 과정에서 pr 보내는 방법도 실수했었는데 - upstream이 아니라 fork한 내 레파지토리에서 pr을 보내는 것이었다. - 깃을 빨리 공부해야겠다는 생각이 든다. 하지만 시험과 과제들이 쏟아진 상태에서 어떤 것을 먼저 해야 할지 모르겠다... 자바스크립트 문법 공부도 필요하고, 깃 공부도 필요하다.

배운 점

  • ===를 사용하는 것은 문자열에서만인 줄 알았는데 모든 경우에서 사용한다는 것을 이번에 알게 되었다.
  • 풀이가 너무 복잡하다면 더 간편하게 풀 수는 없는지 다시 고민해보기!
  • 약 20줄에 걸쳐 쓴 코드를 약 5줄만 쓰고도 같은 결과를 얻을 수 있다는 것이 충격적이었다. 어떻게 하면 더 효율적으로, 보기 쉽게 코드를 쓸 수 있는지 고민해봐야겠다고 느꼈다.
  • pr은 받는 레파지토리에서 선택하는 것이 아니라 보낼 레파지토리에서 선택하는 것!
  • pr을 보낸 사람은 취소할 수 있다. 취소하면 open이 아니라 closed로 넘어간다. 취소하더라도 기록은 남는다.

'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 03 - 2021.12.08  (0) 2021.12.08
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 03 - 2021.12.08
    • Day 01 - 2021.12.06
    Lami
    Lami
    성장하는 즐거움을 알아가는 중입니다🌱

    티스토리툴바