2023-09-15 알고리즘 공부

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

이 게시물은 인프런 JS 알고리즘 강의를 듣고 공부한 내용을 정리하는 게시물 입니다. 문제 내용은 저작권 때문에 올리지 못하는 점 양해 바랍니다 :)

  1. 대소문자 변환 문제 입니다.
function solution(s) {
  let answer;
  for (let x of s) {
      if (x === x.toUpperCase()) answer += x.toLowerCase();
     else answer += x.toUpperCase();
   }
  return answer;
}
console.log(solution('StuDY'));

풀이: toUpperCase() 그리고 toLowerCase() 를 활용해서 대문자이면 대문자를 소문자로 바꾸고 소문자는 대문자로 바꾸는 알고리즘이다.

2.가장 긴 문자열의 문자를 찾아서 출력하는 알고리즘 입니다.

function solution(arr) {
  let answer;
  let max = Number.MIN_SAFE_INTEGER;
  for (let x of arr) {
    if (max < x.length) {
      max = x.length;
      answer = x;
    }
  }
  return answer;
}
console.log(solution([5, 'teacher', 'time', 'student', 'beautiful', 'good']));

풀이: 가장 긴 문자를 찾아 출력하는 알고리즘 인데, 먼저 가장 긴 문자를 찾기 위해서 max를 가장 낮은 숫자로 만들어 놓고 for문을 돌려서 max가 x.length 작으면 max를 x.length 로 바꾸고 answer을 x로 바꿔 가장 긴 문자의 길이는 max가 되고 answer은 x로 바뀌어 최종적으로 가장 긴 문자가 answer이 되는 알고리즘 입니다.

  1. 가운데 문자의 알파벳을 출력하는 알고리즘 입니다. 짝수라면 두개를 홀수라면 한개를 출력 해야합니다.
function solution(s) {
  let answer;
  let mid = Math.floor(s.length / 2);
  if (s.length % 2 === 1) {
    answer = s.substring(mid, mid + 1);
  } else {
    answer = s.substring(mid - 1, mid + 1);
  }

  return answer;
}
console.log(solution('study'));

풀이: 먼저 이 알고리즘을 풀기 위해서 필요한 정보는 가운데 숫자를 가져와야 하기 때문에 mid 라는 변수가 필요합니다. 'study'는 5글자이기 때문에 가운데 숫자가 'u'가 나오지만 'name'에서 가운데 숫자는 확정 짓기 어렵다 그래서 'am' 을 출력해야한다.
s.length 를 나눠서 1이 된다면 홀수이고 , 아니라면 짝수이다.

여기서 배운점은
substring 과 substr 의 차이이다.
먼저 substring(2,3) 이라고 가정한다면, 'study' 의 2부터 시작해서 3 미만 의 모든 인덱스를 추출한다. 그래서 'd'는 추출되지 않고 'u'만 추출된다.
substr(2,3) 이라고 가정한다면, 'study'에서 'u'부터 시작해서 3개의 뒤에 3개를 가져오는거라고 생각하면 된다. 'udy'가 나오게 된다.

그래서 홀수라면 그 숫자의 인덱스만 추출하면 되기 때문에 (가운데 자리 인덱스인 mid) answer=s.substring(mid,mid+1) 이 되고, 짝수라면
answer=s.substring(mid-1,mid+1) 을 추출하면 된다.
'name' 에서 mid 는 2이다. 'name'의 인덱스 2번째는 'm' 이 나온다.
'am'을 추출해야 하기 때문에 mid-1 부터 시작해서 'm'까지 추출해야 하기 때문에 mid+1 까지로 범위를 정해야 한다.

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

0개의 댓글