[21/07/15 KATA NINJA ALGO] 등수구하기 & 점수계산 & 회문문자열 & 거리두기 & 압축

NinjaJuunzzi·2021년 7월 16일
0

코드카타

목록 보기
1/36
post-thumbnail

1일차 (21/07/15)

등수구하기

// 모두가 1로 채워진 등수를 넣을 배열을 만든다.
let answer = [...new Array(arr.length)].map((item) => 1);
// 등수 변수
  let check = 1;
  while (true) {
    if (check > arr.length) {
      // 등수가 모두 채워졌으므로 탈출한다.
      break;
    }
    // 최고점을 구한다.
    const max = Math.max(...arr);
    // 최고점의 등수는 그 당시의 check 값이다.
    const currentCheck = check;
    arr.forEach((arrItem, index) => {
      if (max === arrItem) {        
        answer[index] = currentCheck;
        // 등수를 체크한 값은 -1로 바꾸어 max에 등장하지 않도록한다.
        arr[index] = -1;
        // 같은 등수가 여러명 나오게되면 뒷 등수는 밀리게된다.
        check++;
      }
    });
  }

점수계산

function solution(arr) {
  let answer = 0;
  // 맞추었을때 더해주는 값. 평소에는 1임.
  let check = 1;
  
  arr.forEach((item) => {
    if (item === 0) {
      // 0이되면 1로 초기화한다.
      check = 1;
    } else {
      // 맞췃으면 더해주는 값을 하나 추가
      answer += check;
      check++;
    }
  });
  return answer;
}

회문문자열

const string = s.toLowerCase();
// 짝수든 홀수는 앞 절반을 뽑는건같다.
  const first = string.slice(0, string.length / 2);
  let second;
  if (string.length % 2 === 1) {
    // 뒷 절반뽑기 (5/2 -> 2 --> 3번방부터 짜른다.)
    second = string.slice(string.length / 2 + 1);
  }
  if (string.length % 2 === 0) {
    // 뒷 절반뽑기 (4/2 -> 2 --> 그대로 2번방부터 짜른다.)
    
    second = string.slice(string.length / 2);
  }
  for (let i = 0; i < first.length; i++) {
    if (first[i] !== second[second.length - 1 - i]) {
      // 거꾸로 되어있으므로 비교도 하나는 앞에서부터 출발
      // 다른 하나는 뒤에서 부터 출발하면서 비교
      // 하나라도 다르면 노
      return "NO";
    }
  }
  return "YES";
profile
Frontend Ninja

0개의 댓글