[Daily Coding 4]for문/NaN, Number()/정렬/includes()/else if/복호화/repeat()/연속 문자 count/배열에서 3개의 요소를 곱해 나올 수 있는 최대값 구하기/배열 재할당,추가

hameee·2022년 12월 18일
0

Daily Coding

목록 보기
4/10

1.for문 주의점

-for문 안에 return 두지 말기. 한 턴만 돌고 끝남
-let 써주기

2.NaN, Number()

NaN === NaN // false
!NaN // true
Numbur(' '), Number(''), Number() // 0
Numbur('a') // NaN

3.비교를 위해 요소를 배열에 담을 때

문자열만 존재한다면 배열로 안 만들고 문자열로 만들어도 됨

function decryptCaesarCipher(str, secret) {
  // 알파벳
  let alpha = 'abcdefghijklmnopqrstuvwxyz';

  let result = '';
  for (let i = 0; i < str.length; i++) {
    if (str[i] === ' ') {
      // 공백은 그대로 둔다.
      result = result + ' ';
    } else {
      // 현재 문자의 알파벳 순서를 구한다.
      let asis = alpha.indexOf(str[i]);
      // 복호화는 반대 방향으로 이루어지기 때문에 secret을 뺀다.
      let tobe = (asis - secret + alpha.length) % alpha.length;
      result = result + alpha[tobe];
    }
  }

  return result;
}

4.정렬

const arr = [2, 10, 7, 11, 5]

// 문자열 유니코드에 따른 순서
arr.sort()
console.log(arr); // [10, 11, 2, 5, 7]

// 오름차순
arr.sort(function (a, b) {
	return a - b;
})
console.log(arr); // [2, 5, 7, 10, 11]

// 내림차순
arr.sort(function (a, b) {
	return b - a;
})
console.log(arr); // [11, 10, 7, 5, 2]

5.includes()

string, array 모두 가능

6.else if

위의 조건은 false여야 하고 새로운 다른 조건도 만족해야 한다면 -> else if로 작성

function numberSearch(str) {
  const digits = '0123456789';

  if (str === '') {
    return 0;
  }

  let sum = 0;
  let pureStr = '';
  for (let i = 0; i < str.length; i += 1) {
    if (digits.includes(str[i])) {
      // 숫자인 경우
      sum = sum + Number(str[i]);
    } else if (str[i] !== ' ') {
      // 숫자도 공백도 아닌 경우
      pureStr = pureStr + str[i];
    }
  }

  // 결과를 반올림한다.
  return Math.round(sum / pureStr.length);
}

7.복호화

복호화 시 나머지 연산자(%) 이용

// Q.암호화된 문자열과 암호화 키를 입력받아 복호화된 문자열을 리턴해야 합니다. 카이사르 암호(Caesar cipher)는 평문(plaintext)을 암호키 secret개만큼 (오른쪽으로) 평행 이동시켜 암호화합니다. 복호화는 암호화된 문자열을 원래의 평문으로 복원하는 것을 말합니다.

// 입출력 예시
let output = decryptCaesarCipher('khoor', 3);
console.log(output); // --> hello

output = decryptCaesarCipher('zruog', 3);
console.log(output); // --> world

//A.
function decryptCaesarCipher(str, secret) {
  // 알파벳
  let alpha = 'abcdefghijklmnopqrstuvwxyz';

  let result = '';
  for (let i = 0; i < str.length; i++) {
    if (str[i] === ' ') {
      // 공백은 그대로 둔다.
      result = result + ' ';
    } else {
      // 현재 문자의 알파벳 순서를 구한다.
      let asis = alpha.indexOf(str[i]);
      // 복호화는 반대 방향으로 이루어지기 때문에 secert을 뺀다.
      // secret에 100이 들어가도 알맞은 tobe가 나오도록 % 사용
      let tobe = (asis - secret + alpha.length) % alpha.length;
      result = result + alpha[tobe];
    }
  }

  return result;
}

8.String.prototype.repeat()

문자열을 주어진 횟수만큼 반복해 붙인 새로운 문자열을 반환

'abc'.repeat(-1);   // RangeError
'abc'.repeat(0);    // ''
'abc'.repeat(1);    // 'abc'
'abc'.repeat(2);    // 'abcabc'
'abc'.repeat(3.5);  // 'abcabcabc' (내림한 정수)
'abc'.repeat(1/0);  // RangeError

9.연속되는 문자 연속 횟수 count

이전 문자와 현재 문자를 비교
같다면 count++
아니라면 이전 문자와 count를 초기화

// Q. 문자열을 입력받아 연속되는 문자가 있을 경우, 연속 구간을 반복되는 수와 문자로 조합한 형태로 압축한 문자열을 리턴해야 합니다.

// 입출력 예시
let output = compressString('abc');
console.log(output); // --> abc

output = compressString('wwwggoppopppp');
console.log(output); // --> 3wggoppo4p

// A.
function compressString(str) {
  // 연속되는 문자를 기록하기 위한 변수
  // 첫 번째 문자로 초기화
  let before = str[0];

  // 동일한 문자의 반복 횟수
  let count = 1;

  // 정답으로 리턴할 문자열
  let result = '';

  // 마지막 부분이 연속된 문자일 경우를 위해 dummy 문자 추가
  str = str + ' ';
  for (let i = 1; i < str.length; i++) {
    // 동일한 문자가 반복될 경우
    if (before === str[i]) {
      count++;
    } else {
      // 이전과 다른 문자일 경우,
      // 반복된 횟수가 3 이상일 경우에만 압축한다.
      if (count >= 3) {
        result = result + `${count}${before}`;
      } else {
        result = result + before.repeat(count);
      }
      before = str[i];
      count = 1;
    }
  }

  return result;
}

10. 배열에서 3개의 요소를 곱해 나올 수 있는 최댓값 구하기

//Q. 정수를 요소로 갖는 배열을 입력받아 3개의 요소를 곱해 나올 수 있는 최댓값을 리턴해야 합니다.

// 입출력 예시
let output = largestProductOfThree([2, 1, 3, 7]);
console.log(output); // --> 42 (= 2 * 3 * 7)

output = largestProductOfThree([-1, 2, -5, 7]);
console.log(output); // --> 35 (= -1 * -5 * 7)

// A. 
const largestProductOfThree = function (arr) {
  const sorted = arr.slice().sort((a, b) => a - b);
  const len = arr.length;
  const candi1 = sorted[len - 1] * sorted[len - 2] * sorted[len - 3];
  const candi2 = sorted[len - 1] * sorted[0] * sorted[1];
  return Math.max(candi1, candi2);
};

11.배열도 인덱스를 이용해 재할당, 추가 가능

배열은 인덱스를 key로 갖고 있는 객체이기 때문에 객체와 같이 재할당, 추가 가능

0개의 댓글