[F-Lab 모각코 챌린지 - 9일차] - 알고리즘 문제풀이

Big One·2023년 5월 19일
0

F-Lab

목록 보기
54/69

1. reverse

Write a recursive function called reverse which accepts a string and returns a new string in reverse.

문제 해석: 인자로 들어온 문자열을 거꾸로 출력해라.
풀이 조건: 재귀
문제 풀이: 재귀는 무조건 함수를 호출한다. 일단 적고 시작하면 될듯
ex) 함수 이름: reverse 인자값: str
1. 문자열로 들어오는 인자를 뒤에서부터 하나 씩 출력하면서 리턴할 값에 모두 더해주면된다.
2. 인자값 맨 마지막 문자열만 리턴
3. 리턴값 제외한 문자를 인자로 넣는다.

if(str.length === 1) return str;
return str[str.length-1] + reverse(str.slice(0, str.length-1));

2. 팰린드롬 isPalindrome

문제 해석 : 역순으로 읽어도 같은 단어인지 판별(수박이박수?)
풀이 조건: 재귀
문제 풀이: 첫 글자와 마지막 글자가 같으면 재귀 함수 호출, 다르면 false를 반환한다 생각했고,함수를 호출 할 때 매개변수의 첫번째 글자와 마지막 글자를 제외 시켜서 넣어줘야한다. -> slice를 이용함. 글자수가 1개가 남거나 0 개가 남으면 true이기 때문에 조건문(탈출조건? 종료시점?) 설정 해줌

function isPalindrome(str){
  // add whatever parameters you deem necessary - good luck!
  if(str.length <=1) return true;
  let first = 0;
  let last = str.length-1;
  return str[first] === str[last] ? isPalindrome(str.slice(1, str.length-1)) : false;
}

3. flatten

문제 해석: 걍 다 이어붙이면 되는 듯 ..?
풀이 조건: 재귀
문제 풀이: 첫 글자와 마지막 글자가 같으면 재귀 함수 호출, 다르면 false를 반환한다 생각했고,
함수를 호출 할 때 매개변수의 첫번째 글자와 마지막 글자를 제외 시켜서 넣어줘야한다. -> slice를 이용함.
글자수가 1개가 남거나 0 개가 남으면 true이기 때문에 조건문(탈출조건? 종료시점?) 설정 해줌
3. flatten - 걍 다 이어붙이면 되는 듯 ..? 음 .. 배열안에 감싸져 있는건 typeof 로 비교했을 떄 flatten 재귀 호출 그게 아니면 slice(1)해서 재귀 호출
결론 .. 다 틀림 ㅠ ㅠ ㅠ ㅠ 그냥 포문으로 배열 길이만큼, 돌리면서 배열안에 또 배열이면 재귀를 호출하는게 맞음 ㅠㅠ
헷갈렸던것: concat할 때 result = result.concat(data) 하면 되는데 자꾸 result.concat()만 해야한다고 생각됨 .. 어차피 덮어쓰는거니까 = 하는게 맞음 ㅠ 그리고 … else… 조건에서 retrun 하거나 continue할거 아니면 else 써야함 안그러면 밑에 문 그대로 수행함

function flatten(array){
    let result = [];
    for(let num of array){
        if(Array.isArray(num)){
            result=result.concat(flatten(num));
        }else{
            result.push(num);
        }
    }
    
  return result;
}
profile
이번생은 개발자

0개의 댓글