2023-09-16 알고리즘

김재우·2023년 9월 16일
0
post-thumbnail

이 게시물은 인프런 js 알고리즘을 공부하고 기록한 게시글입니다.
문제는 저작권 때문에 올리지 못하는 점 양해 바랍니다.

1.중복 단어를 제거 하는 알고리즘

function solution(s) {
  let answer;
  answer = s.filter((v, i) => s.indexOf(v) === i);
  return answer;
}
let arr = ['good', 'time', 'good', 'time', 'student'];
console.log(solution(arr));

풀이: 해당 알고리즘은 고차함수인 filter 를 사용하여 중복된 값을 제거하는 알고리즘이다.
고차함수란? 파라미터값에 매개변수가 함수로 들어오는것을 뜻한다.
map,reduce,forEach,filter 등이 있다.
filter를 간략하게 소개하자면 filter(function(v,i){
return console.log(v,i) }) 형태로 사용되며 , v는 arr의 각각의 값이 들어가고 i 는 index 를 의미한다. 예를들어, arr[7,6,5,4,3,2] 라는 arr에 filter를 사용하게 되면 v 는 7,6,5,4,3,2 가 되고 i는 0,1,2,3,4,5가 순서대로 출력 될것이다.
자 그럼 문제를 봤을때 , s.indexOf(v) === i 랑 같다는 의미는 indexOf() 함수는 인덱스 가장 첫번째부터 마지막까지 돌면서 인자값이랑 같은 값이 나온 해당 인덱스 번호를 반환해주는 함수인데. 'good'이 들어간다고 가정했을때 good 이 제일 먼저 있는 인덱스는 0번이다. 0번과 해당 인덱스 0 번이 같기 때문에 filter함수에는 good 이 남겨지게 된다. 그래서 결국에는 good,time,student 외에는 2번과 3번은 indexOf('good')이 === 1번으로 성립이 되지 않으므로 사라지게 된다.

2.이번에는 중복 문자 제거 하는 알고리즘이다.

function solution(s) {
  let answer = '';
  for (let i = 0; i <= s.length; i++) {
    if (s.indexOf(s[i]) === i) answer += s[i];
  }
  return answer;
}
console.log(solution('ksekkset'));

풀이: 해당 풀이내용도 indexOf 를 이용하여 푼 풀이이다. 사실 new Set을 이용하면 중복된 문자가 바로 사라져서 사용해도 되는데 . 알고리즘 풀이는 다양하게 알수록 좋을거 같아서 indexOf를 이용했다.
s.indexOf(s[i]) === i 가 같을때만 answer += s[i] 를 더해줌으로써
'kset' 만 남게 된다.

  1. 중복 단어 카운팅 하는 알고리즘
function solution(s) {
  let answer = 0;
  let pos = s.indexOf('k');
  while (pos !== -1) {
    answer++;
    pos = s.indexOf('k', pos + 1);
  }
  return answer;
}
console.log(solution('ksekkset'));

풀이: 해당 알고리즘의 풀이는 먼저 첫 문자 'k'의 인덱스 위치를 pos 라는 변수에 저장한다. 그리고 while문을 통해 indexOf('k')가 있으면 answer 을 카운팅 해주고 pos 를 다시 k부터 찾는데 이번엔 그 이전에 있던 값에 +1을 해줌으로써 범위를 축소 시켜주었다.

  1. 큰 수 출력하기
function solution(num, arr) {
  let answer = [];
  answer.push(arr[0]);
  for (let i = 1; i < arr.length; i++) {
    if (arr[i] > arr[i - 1]) {
      answer.push(arr[i]);
    }
  }
  return answer;
}
let arr = [7, 3, 9, 5, 6, 12];
console.log(solution(6, arr));

풀이: 이 알고리즘은 앞의 숫자보다 다음숫자가 크면 남기고 작다면 소거하는 알고리즘이다.
먼저 첫번째 자리는 항상 포함되어야 하기 때문에 arr[0] 을 arr에 푸쉬해줬다.
그리고 for문을 통해서 arr.length 만큼 돌면서 arr[i] 현재 인덱스가 arr[i-1] 이전 인덱스보다 크다면 해당 인덱스의 값을 배열에 푸쉬해줌으로써 이전값보다 다음값이 큰 인자들만 answer 배열에 push 되어진다.

profile
프론트엔드 꾸준개발자입니다.

0개의 댓글