과제 02
과제 제출 후 코드리뷰 받았지만 실수록 삭제했던...
코드 수정 후 다시 받은 리뷰
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 |