Array[1,2,3,4]

야 나 개 ·2021년 10월 22일
0
post-thumbnail

배열 개념은 익히고 왔지?
형 믿어도 되지? ㅋㅋㅋ

간단문제 살짝 하고 갈까?

1번문제

문자열을 입력받아 문자열을 구성하는 각 문자를 요소로 갖는 배열을 리턴해야 합니다.

문자열을 하나하나 나눠서 배열에 넣는 문제야

물론 split 이라는 메소드를 해서 풀수도 있어
근데 이건

push랑
반복문을 적용할 수 있는지 묻는 문제야 ~~ㅇㅋ? 그럼 간다

let output = getAllLetters('apple');
console.log(output); // --> ['a','p','p','l','e']
function getAllLetters(str) {
  // TODO: 여기에 코드를 작성합니다.
  let arr = [];    //리턴할 배열을 하나 선언해줘 
  for(let i = 0; i < str.length; i++){ // 문자열 0번째부터 끝까지 반복해줘
    arr.push(str[i]) //그걸 뒤에서 부터 하나 하나 담아줘 
  }return arr;  // 만든 배열을 리턴해줘 
}

사실 이 문제는 너무 기초라서 그냥 넘길께 그 다음 대소비교 간다!!~~~


2번문제 (가장 큰 수 찾기)

배열을 입력받아 가장 큰 요소를 리턴해야 합니다.

개꿀팁 🐶
그냥 꿀팁 쏜다 (형들은 이거 말고 다른거 고민해)
첫번째 값이랑 두번째 값이 비교해 둘중에 가장 큰걸 할당하고
그걸다시 세번째랑 비교해 ㅇㅋ?

수도코드 간다
1.결과값을 나타낼 변수에 배열의 0번째 인덱스 값을 할당한다.
2.반복문을 사용해서 1번째부터 마지막까지 하나하나 반복해주세요.
3.만약에 0번째 값보다 1번째 값이 크면 1번째 값을 결과값 변수에 할당해 주세요.
4.계속 비교해주세요.
5.결과값을 리턴해주세요.

function getLargestElement(arr) {
  // TODO: 여기에 코드를 작성합니다.
  let maxNum = arr[0]
  for(let i = 1; i < arr.length; i++){
    if(maxNum < arr[i]){
      maxNum = arr[i];
    }
  }return maxNum;
} 

어때? 간단하지?????ㅋㅋㅋㅋㅋ
모르면 전화해라 제발


3번문제

0-9 사이의 정수를 요소로 갖는 배열을 입력받아 전화번호 형식의 문자열을 리턴해야 합니다.

이렇게 리턴되어야 함

문제를 보니까..(010)도 있고,,(011)도 있다...
요즘 (070)도 있더라

다들 보이스피싱 조심하고 !!!~~ ㅋㅋ 코딩공부하다가 얼타지 말고

let output = createPhoneNumber([0, 1, 0, 1, 2, 3, 4, 5, 6, 7, 8]);
console.log(output); // --> '(010)1234-5678'

output = createPhoneNumber([8, 7, 6, 5, 4, 3, 2, 1]);
console.log(output); // --> '(010)8765-4321'

output = createPhoneNumber([0, 1, 1, 4, 3, 2, 1, 8, 7, 6, 5]);
console.log(output); // --> '(011)4321-8765'

수도코드부터 시작하자
1.전화번호의 3등분으로 나누자 (곤충처럼 ㅋㅋ)
(나 처음에 8자리냐. 11자리로 나눠도 되는데 좀 길어 그렇게)
head,middle,last로 나눠

2.head 에는 일단 010을 넣어둬 (넣어둬 넣어둬 ㅋㅋㅋ)
head는 0~2번째 슬라이스 해줘
middle은 3번째 부터 6번째까지 슬라이스
last는 7부터 끝까지 슬라이스 해줘

슬라이스뒤에 전부 조인으('')빈문자열로 문자열로 전환시켜줘

3.만약에 배열의 길이가 8자리면 헤드는 따로 할당하지 않아
이 외 전부 3개 변수를 합춰서 리턴해줘

function createPhoneNumber(arr) {
  // TODO: 여기에 코드를 작성합니다.
  let head = '010';
  let middle = '';
  let last = '';

  if(arr.length === 8){
    middle = arr.slice(0,4).join(''); 
    last = arr.slice(4).join('');  
  } else{
    head = arr.slice(0,3).join('');
    middle = arr.slice(-8,-4).join('');
    last = arr.slice(-4).join('');
  }
  return `(${head})${middle}-${last}`;
}

그리고 혹시 몰라 좀더 리퍼런스도 보여줄께(

function createPhoneNumber(arr) {
  let head = '(010)';
  const len = arr.length;
  const body = arr.slice(len - 8, len - 4).join('');
  const tail = arr.slice(len - 4, len).join('');

  if (len === 11) {
    head = `(${arr.slice(0, 3).join('')})`;
  }

  return `${head}${body}-${tail}`;
}

그리고 슬라이스 하는 방법는 무긍무진해 ㅋㅋㅋ(-4)을 넣어주면 뒤에서 부터 짤라주는거야

이건 직접 콘솔창에 찍어봐~~

당황한 잼민이들 다음문제로 넘어갈께


4번문제

수(num)를 입력받아 num번째까지 총 num + 1개의 피보나치 수열을 리턴해야 합니다.

0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1입니다. 그 다음 2번째 피보나치 수부터는 바로 직전의 두 피보나치 수의 합으로 정의합니다.
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...

앞으로 이런문제로 가득할꺼야 넘 기쁘지?? ㅋㅋㅋ

저런 형태는 일단 쭉 지켜봐봐 어때?!

규칙을 찾아야해

2번째 인덱스 부터 봐봐
(i-2)+(i-1) => 이게 피보나치 수열의 규칙성이야

ㅇㅋ? 그리고 콜백함수 개념인데 이번에 살짝하고 가자
할당된 변수에 또 다시 변수를 넣는 방법이야

이런거 이제 자주 쓸꺼야

왜냐하면 우린 이미 발명된걸 굳이 또 만들필요 없어 가져다 쓰면 되는거야
근데 가져다 쓸려면 원리을 알아야 제대로 사용할 수 있지? 오케?

그럼 수도코드 할께
1.결과값을 반환할 새로운 변수를 선언해줘
2.0번째 부터 입력된 수까지 반복해줘
3.만약에 0,1까진 0,1 i를 넣어줘
4.2이상부턴 i-2, i-1를 할당된 결과값 배열의 값을 다시 넣어줘

function fibonacci(num) {
  // TODO: 여기에 코드를 작성합니다.
  let fibArr = [];

  for(let i = 0; i <= num; i++){
    if( i < 2 ){
      fibArr.push(i)  
    }else {
      fibArr.push(fibArr[i-2] + fibArr[i-1])
    }
  }return fibArr;
}

어때? 알아보겠어?
포인트 두가지
1.규칙 알아내기!!
2.할당값에 다시 재할당 하기!!

profile
야 나도 개발자 될 수 있어

0개의 댓글