SEB_FE_39 회고 11일차

최정석·2022년 5월 11일
0

배열과 객체 내가 어려워 했던 문제들

  1. 0-9 사이의 정수를 요소로 갖는 배열을 입력받아 전화번호 형식의 문자열을 리턴해야 합니다. ex) (010)1234-5678
// 배열의 길이는 8 또는 11
// 배열의 길이가 8인 경우, 앞에 [0,1,0]이 있다고 가정한다.
// 11자리일때 2번째 인덱스까지 양쪽에 ()가 붙어야하고 4개 4개 사이에 '-' 들어가야함
// 입력: [0, 1, 0, 1, 2, 3, 4, 5, 6, 7, 8] 
//      [8, 7, 6, 5, 4, 3, 2, 1]
// 출력:(010)1234-5678
function createPhoneNumber(arr) {
	let head = arr.slice(0, 3).join('');
    let len = arr.length;
    let body = arr.slice(len-8, len-4).join('');
    let tail = arr.slice(len-4, len).join(''); //배열을 3부분으로 나눠서 join하고 ``을 이용하여 출력에 맞게 리턴
    
    if(len === 8){
    	head = '010'
    }
    return `(${head})${body}-${tail}`;
}

이 문제를 처음 해결할 때는 먼저 join을 쓰고 그걸 slice()를 이용해 `` 에 넣어주려고 했다. 그러다보니 코드가 매우 길어졌고 산만해졌다. head 와 body, tail로 세부분을 나누니 코드가 간결해졌다.

  1. 수(num)를 입력받아 num번째까지 총 num + 1개의 피보나치 수열을 리턴해야 합니다.
// 입력값 ex) 9
// 출력값 ex) [0(arr[0]), 1(arr[1]), 1, 2, 3, 5, 8, 13, 21, 34]
function fibonacci(num) {
	let arr = [];
	for(let i = 0; i <= num; i++){
    	if(i === 0){
        	arr.push(0);
        } else if(i === 1){
        	arr.push(1);
        } else {
        	arr.push(arr[i-2] + arr[i-1]);
        }
    } return arr
}

이 문제는 첫인상이 매우 좋지 않다. 수열이라는 이름에 페어와 나는 겁부터 먹었다. 그래도 페어와 피보나치 수열의 n번째 수는 n-2번째 수와 n-1번째 수를 더한 수라는 걸 알았다. 하지만 이걸 코드로 쓰는 것은 어려웠다. 결국 레퍼런스를 참고해서 이해하려고 노력했고 실시간 세션에서 완전히 이해가 됐다.

  1. 문자열을 입력받아 문자열을 구성하는 각 문자(letter)를 키로 갖는 객체를 리턴해야 합니다.
//입력값: 'apple'
//출력값: {a: 1, p: 2, l: 1, e: 1}
//입력이 문자열이기 때문에 객체를 만들어야 넣을 수 있음
//문자열을 순회하는 반복문 작성
let obj = {};

function countAllCharacters(str) {
	
    for(let i = 0; i < str.length; i++){
    //만약에 객체 안에 그 문자로 된 키가 없으면, 생성을 해주고 -> 0
    //있으면 + 1
    
    	if(obj[str[i]] === undifined) {
       		obj[str[i]] = 0;
       	}
        //if문 밖으로 빠져나오자마자 1이 더해짐
       	obj[str[i]]++;
      } 
      return obj;
    }

이 문제를 풀 때 str을 순회하는 반복문은 쉽게 작성했다. 딱 반복문까지만 쉽게 작성하고 문자를 count하는 방법을 쉽게 생각해내지 못했다. 결국 그렇게 실시간 세션에서 교육 엔지니어님의 도움을 받아 이해할 수 있었다.

오늘의 감정

확실히 배열과 객체는 반복문과 조건문을 처음 배웠을 때 보다는 할만 했던것 같다. 그리고 반복문이 들어가는 문제에서 반복문까지는 쉽게 써내려가는걸 느끼고 내가 조금은 발전했다고 생각했다. 하지만 수도코드를 작성하는 습관은 생기지 않았다. 항상 상상부터 먼저 하는것 같다. 복습할 때와 다음 문제해결에선 꼭 수도코드를 써서 풀어야겠다.

0개의 댓글