Honey-Programming

[TIL-011] 20.08.03 본문

코드스테이츠/Today I Learned

[TIL-011] 20.08.03

Latte_is_horse 2020. 8. 4. 00:09

1. Summary(3 Line)

프리코스 6일차(3줄 요약)

Sprint Review를 하면서 대략은 알지만 명확하게 설명 할 자신이 없었다. 

Algorithm Basic... 이거 Basic 맞죠?... 난 붕어인가봐...

성격도 좋고 배려와 소통도 페어와의 마지막 페어(금요일이 끝인줄... 착각)


2. Today's Todo

  • 코플릿(Algorithm Basic) 복습
  • Sprint Review & Feedback
  • 2번째 페어 리뷰

#1 코플릿(Algorithm Basic)

2개만 하고 올리고 나머지는 주말에 알고리즘 카테고리에 올릴 예정

 

7번 convertListToObject

: 2차원 배열을 입력받아 각 배열을 이용해 만든 객체를 리턴

 

인자 1 : arr

  • arr[i]는 string 타입을 요소로 갖는 배열
  • arr[i] 길이는 0 or 2

출력

  • arr[i]의 첫 번째 요소는 키, 두 번째 요소는 값으로 하는 객체 리턴

주의 사항

  • 중복되는 키가 있다면, 먼저 나온 키와 값을 사용
  • 빈 배열일 경우, 빈 객체를 리턴
  • arr[i]의 length가 0인 경우, 무시

출력예시

const arr = [
  ['make', 'Ford'],
  ['model', 'Mustang'],
  ['year', '1964'],
  ['make', 'Bill'],
];

let output = convertListToObject(arr);

console.log(output) // -->
{
  make : 'Ford'
  model : 'Mustang',
  year : '1964'
}

 

의사코드

- 빈 객체를 하나 변수(obj)로 선언

- arr의 길이만큼 for문으로 반복문 돌림

- 조건 1) arr[i]의 길이는 0보다 크다

- 조건 2) 새로운 객체arr의 i번째 키 값이 존재하지 않는다.(중복체크)

- obj[arr[i][0]] = arr[i][1];

 

최종코드

function convertListToObject(arr) {
  let obj = {};

  for(let i=0; i< arr.length; i++) {
    if(arr[i].length > 0 && obj[arr[i][0]] === undefined) {
    // if(arr[i].length !== 0 && obj[arr[i][0]] === undefined) {
        obj[arr[i][0]] = arr[i][1];
    }  
  }
  return obj;
}

 

8번 convertListToObject

: 문자열을 입력받아 해당 문자열에 등장하는

두 칸의 공백을 모두 한 칸의 공백으로 바꾼 문자열을 리턴

 

인자 1 : str

  • string 타입의 문자열

출력

  • string 타입의 문자열

주의사항

  • 두 칸 이상의 공백은 없다고 가정

출력예시

 

let output = convertDoubleSpaceToSingle('string  with  double  spaces');
console.log(output); // --> "string with double spaces"

의사코드

- string 문자열 일부를 바꿔주는 메소드 찾아봄 '  ' => ' '

- string '  '을 기준으로 arr.split();

- join('  ')으로 다시 arr를 string으로 바꿔준다.

 

최종코드

// 방법1)split(), join() 이용함
function convertDoubleSpaceToSingle(str) {
  let strToArr = str.split('  ');
  let convertToStr = strToArr.join(' ');
  return convertToStr;
}
// 방법2)replace를 이용하여 정규식으로 표현
// g = 전방위로 문자열에 해당디는 내용이 여러개 있어도 적용
// i = 대소문자 구분 없이 적용되게.
function convertDoubleSpaceToSingle(str) {
  const regex = /  /gi;
  newStr = str.replace(regex, ' ');
  return newStr;
}

 

// 방법3)
let result = '';
let before = '';
for (let i = 0; i < str.length; i++) {
  // 직전의 문자가 공백이고, 현재의 문자도 공백인 경우
  // 즉, 현재의 문자가 두 번째 공백인 경우(에만), 무시한다.
  if (before !== ' ' || str[i] !== ' ') {
    result = result + str[i];
  }
   before = str[i];
  }
  return result;
}

 

 

#2. 스프린트 리뷰 (Sprint Review) (체크리스트)

엔지니어 분이 올려주신 자신이 어떤 내용을 알고 있는지 고민해보기

: 올려주신 것들로 체크해본 결과... 반복문, 알고리즘 쪽에서 확실히 자신있게 잘 할 수 있다

라는 것을 아직은 말 할 수 없는것 같았다... 반복문, 알고리즘 쪽을 좀 더 공부해야 할 것 같다.

 

### **Read Me**

**잘 작동하는 어플리케이션을 만들기 위해서는 자신의 목적에 충실한 간결한 코드를 바르게 작성하는 것이 중요합니다.

간결하고 바른 코드 작성을 위해서는 매우 작은 단위의 간단한 문제들을 여러개 풀어보면서 기초 문법을 숙달해야 합니다.**

### **Level 1-1 JavaScript 기초와 문제 해결**

- JavaScript 개발 툴 익히기 

- Chrome Developer Console의 기본적인 사용법을 이해할 수 있다. (0)

- Chrome Developer Console에서 JavaScript의 입력/출력을 확인할 수 있다. (0)

- 문법 에러를 최소화하고 에러가 났을 때 발견할 수 있다. (△)

- debugger 키워드를 사용할 줄 안다. (0)

- 자기주도적 학습법 익히기 (△)

코플릿은 테스트 케이스를 기반으로, 여러분이 작성한 코드가 제대로 작성되었는지 확인합니다.

- 먼저 요구사항을 읽어봅시다

- 테스트 케이스를 확인해봅니다

- 테스트가 통과하지 않은 이유를 확인합니다

- 알고리즘에 대해 이해하기

- 문제 분해 ⇒ (1) 문제를 쓴다.

- 의사코드 작성 ⇒ (2) 매우 깊게 생각한다.

- 코드로 옮기기 ⇒ (3) 답을 쓴다.

- 변수와 자료형

- 변수

- 변수가 무엇인지 간단히 설명할 수 있어야 한다. (0)

- 변수의 선언과 할당에 대해서 설명하고 코드로 작성할 수 있어야 한다. (0)

- 표현문이 값으로 변환되어서 변수에 할당되어 담기는 과정을 설명할 수 있어야 한다. (0)

- 함수

- 함수가 "작은 기능의 단위"라는 것을 이해할 수 있어야 한다.  (0)

- 함수가 선언되어 변수에 담기는 과정을 설명할 수 있어야 한다.  (0)

- 함수의 결과값이 변수에 할당되어 담기는 과정을 설명할 수 있어야 한다.  (0)

- 괄호 내에 인자를 넣어서 함수로 전달하여 실행시킬 수 있다.  (0)

- 함수의 호출과 함수 그 자체 (선언식)를 구분할 수 있어야 한다.  (0)

- return과 콘솔 출력의 차이를 이해할 수 있다.  (0)

- 타입

- 타입마다 다른 속성과 메소드가 있다는 것을 이해할 수 있어야 한다.  (0)

- `typeof` 를 활용하여 특정 값의 타입을 확인할 수 있다.  (0)

- `==` 및 `!=`가 타입 검사를 하지 못한다는 것을 알 수 있다.  (0)

- 타입의 종류가 크게 6가지라는 것을 알고 있다.  (0)

- 조건문

- `truthy`와 `falsy` 가 조건문에서 작동하는 방식을 이해할 수 있다.  (0)

- 논리 연산자에 대해 이해할 수 있다.  (0)

- `if` 와 `else if` , `else`를 이해하고 무리없이 활용할 수 있다.  (0)

- 복잡한 조건문을 활용하여 실생활에서 쉽게 마주할 수 있는 문제를 해결할 알고리즘을 짤 수 있다.  (△)

- 문자열

- 문자열의 속성과 메소드를 이용해 원하는 형태로 만들 수 있다.  (0)

### **Level 1-2. 배열, 객체, 반복문**

대량의 정보를 쉽게 처리하고, 변수 하나에 저장하기 어려웠던 복잡다단한 정보를 한 변수에 저장하고 효율적으로 관리 할 수 있습니다.

- 자기주도적 학습법 익히기

- 내가 모르는 것에 대해서 열심히 찾아보고, 내가 모르는 것이 무엇인지 찾아가는 연습을 해봅시다

- 반복문

- 반복문을 활용하여 단순한 기능을 반복하여 수행할 수 있다.  (△)

- for 문과 문자열, 숫자를 이용해 반복적으로 코드를 실행시킬 수 있다.  (△)

- 기본적인 for 문 `for (let i = 0; i < 5; i++)` 을 응용하여 다양한 for 문을 만들 수 있다.  (△)

- 반복문에 조건문을 응용하여 특정 조건에서만 코드를 실행시킬 수 있다.  (△)

- 이중 포문이 무엇인지 이해하고 활용할 수 있다.  (△)

- 배열

- 배열에서 사용되는 다음 용어에 대해 정확히 이해할 수 있다.

- index, element  (0)

- 배열의 반복  (△)

- 배열의 반복 기초를 이해할 수 있다.  (0)

- for 문과 배열을 이용해 반복적으로 코드를 실행시킬 수 있다.  (0)

- 기본적인 for 문 `for (let i = 0; i < 5; i++)` 을 응용하여 다양한 for 문을 만들 수 있다.  (△)

- 반복문에 조건문을 응용하여 특정 조건에서만 코드를 실행시킬 수 있다.  (△)

- 이중 포문이 무엇인지 이해하고 활용할 수 있다.  (△)

- 배열과 반복문을 활용하여 실생활에서 접할 수 있는 간단한 문제를 해결할 수 있다.(△)

- 문자열과 배열의 형태 변환을 돕는 메소드를 알고 있다.  (△)

- 띄어쓰기 `(" ")` 로 문자열을 구분하여, 배열로 바꿀 수 있다. `str.split(" ").join(" ")`  (0)

- 위의 배열을 다시 문자열로 바꿀 수 있다. (0)

- 배열 요소(element)의 조회, 추가, 삭제, 복사, 분리 하는 법을 이해할 수 있다. (0)

- arr[0], push, pop, unshift, shift, slice, length (0)

- 객체

- 배열 및 객체 구조를 이해하고 어떻게 사용하는 지 이해할 수 있다.  (0)

- 배열과 객체의 특징을 구분하여 사용할 수 있다. (순서를 가진다, 의미를 가진다)  (0)

- 객체 속성(property)의 추가, 삭제, 조회를 자유자재로 할 수 있다.  (△)

- 객체 속성 조회법 두 가지, dot notation과 bracket notation의 차이를 이해한다.  (0)

- `obj.a = "hello"` 와 같은 이질적인 객체 할당 방식을 능숙하게 다룰 수 있다.

- 객체 속성 삭제를 위한 `delete` 키워드를 사용할 수 있다.  (0)

- 객체를 위한 for문 `for ... in` 문의 기본을 이해하고 다룰 수 있다.  (△)

- 배열과 객체, 반복문을 응용하여 능숙하게 대량의 정보를 다룰 수 있다.  (△)

### **Level 1-3. 알고리즘과 Better Code**

### **Before You Learn**

이 단계로 가기 전에 다음의 체크리스트를 통해 여러분의 상태를 파악해보았으면 좋겠습니다. 혹시 각각의 항목에 대해 자신있게 "할 수 있다" 라고 표시하기 어려울 수도 있습니다. 이제는 그저 문제를 풀어내는 것이 다가 아닙니다. 지금부터라도, 결과보다 과정을 중시하여, 체크리스트에 맞게 문제를 풀어내시기 바랍니다. 해당 내용에 대해 자신있게 체크할 수 있는 여러분이 되길 바랍니다.

- [ ] 요구사항이 하나 이상인 문제를 여러개로 쪼개서 생각할 수 있다. (△)

- [ ] 문제를 일상적인 문장으로 표현할 수 있다. (해당 위치에 바르게 주석을 적을 수 있다.)  (△)

- [ ] 잘게 쪼갠 특정 문제가 이미 배운 JavaScript의 어떤 개념과 연관되는지 생각해낼 수 있다.  (△)

## **Achievement Goals**

- 나 뿐만이 아닌, 남들도 읽기 쉬운 코드를 작성할 수 있다.  (△)

- 알고리즘 문제를 풀기 위해 Before You Learn의 각 항목에 대해 자신있게 체크할 수 있다.  (△)

- for문과 if문을 활용한 복잡한 알고리즘을 구현할 수 있다.  (△)

- split과 join을 활용하여 문자열을 자유자재로 다룰 수 있다. (△)

- 하나의 객체에 예상되지 않은 변수를 저장할 수 있다.  (△)

- 하나의 for문, 혹은 여러개의 for문에 if를 적재적소에 넣어서 활용할 수 있다.  (△)

#3. 페어 리뷰 [2](Pair Review [2])

이번 페어분은 대화를 하다보니 대학원 까지 나오신 분이라 그런지 습득력과 이해가 빠르셨다. 

다른 비전공자들과는 확실히 다르신것 같았다. 저는 의사코드를 약간 영양가 없게 썼었다면,

페어분은 저와는 다르게 의사코드를 명확하고 다른 사람들도 보기 쉽게 쓰셨었다. 그래서 그것을

보고 배우면서 나도 내가 아닌 다른 사람이 내 의사코드를 봤을때 명확하게 이해 할 수 있게 해야 한다고 생각했다.

앞으로 페어를 하다보면 서로 성향이 안맞고 하는 사람들이 있을것인데, 이번 페어분은 어느 페어와 하던지

문제 없이 잘하실 것 같다. 나도 좋은 페어가 되기 위해 고민을 해봐야 할 것 같다.  나의 다음 페어는.... 과연?

'코드스테이츠 > Today I Learned' 카테고리의 다른 글

[TIL-013] 20.08.05  (1) 2020.08.05
[TIL-012] 20.08.04  (0) 2020.08.04
[TIL-010] 20.07.31  (0) 2020.07.31
[TIL-009] 20.07.30  (0) 2020.07.30
[TIL-008] 20.07.29  (0) 2020.07.29
Comments