-for문 안에 return 두지 말기. 한 턴만 돌고 끝남
-let 써주기
NaN === NaN // false
!NaN // true
Numbur(' '), Number(''), Number() // 0
Numbur('a') // NaN
문자열만 존재한다면 배열로 안 만들고 문자열로 만들어도 됨
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;
}
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]
string, array 모두 가능
위의 조건은 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);
}
복호화 시 나머지 연산자(%) 이용
// 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;
}
문자열을 주어진 횟수만큼 반복해 붙인 새로운 문자열을 반환
'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
이전 문자와 현재 문자를 비교
같다면 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;
}
//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);
};
배열은 인덱스를 key로 갖고 있는 객체이기 때문에 객체와 같이 재할당, 추가 가능