palindrome('abcde') // 'edcbabcde'
palindrome('abcbac') // 'cabcbac'
palindrome('zxcxz') // 'zxcxz'
function palindrome(str) {
// 여기에서 작업하세요.
let answer = "";
// for(let i = str.length - 1; i > 0; i--){
// answer += str[i]
// }
for (let i = 1; i < str.length; i++) {
// 문자열 마지막 인덱스부터 answer에 저장
answer += str[str.length - i];
}
answer += str[0];
for (let i = 0; i > str.length; i + 2) {
if (answer[i] !== answer[answer.length - i]) {
answer += str[i];
}
}
return answer;
}
function palindrome(str) {
function reverse(string, i, j) {
const arr = string.split('');
while (i < j) {
let temp = arr[i];
arr[i] = arr[j];
i++;
arr[j] = temp;
j--;
}
return arr.join('');
}
let index = 0;
for (let i = str.length - 1; i >= 0; i--) {
if (str[i] === str[index]) index++;
}
if (index === str.length) return str;
const remainingRev = str.substring(index, str.length);
const start = reverse(remainingRev, 0, remainingRev.length - 1);
const mid = palindrome(str.substring(0, index));
const last = str.substring(index);
return start + mid + last;
}
당신은 지각 직전의 회사원입니다.
총 2대의 엘레베이터 중 가장 빨리 도착하는 것을 찾아 탑승해야 제시간에 도착할 수 있습니다.
인자로 left, right, call가 주어집니다.
세 인자는 모두 number 타입입니다.
left와 right는 각 엘레베이터의 현재 층을 의미합니다.
call은 당신이 현재 위치한 층을 의미합니다.
당신의 목표는 가장 빠르게 탑승할 수 있는 엘레베이터를 찾는 것입니다.
두 엘레베이터 모두 당신이 있는 층으로 오고 있으며, 어떠한 것을 타더라도 당신이 목표한 층으로 바로 이동한다고 가정합니다.
left 엘레베이터가 가장 먼저 도착한다면 문자열 “left”를 리턴해주세요.
right 엘레베이터가 가장 먼저 도착한다면 문자열 “right”를 리턴해주세요.
만약 두 엘레베이터가 동시에 도착한다면 “right”를 리턴해주세요.
최고층은 13층입니다.
pickElevator(4, 13, 2) // "left"
pickElevator(8, 1, 2) // "right"
function pickElevator(left, right, call) {
// 여기에서 작업하세요.
return Math.abs(left - call) >= Math.abs(right - call) ? "right" : "left";
}
숫자를 요소로 가진 배열 belt과 숫자 sec가 주어집니다.
belt는 무한히 회전하는 컨베이어 벨트입니다.
해당 belt 위에는 숫자들이 올라가 있으며 숫자들은 1초마다 한칸씩 오른쪽으로 이동합니다.
belt의 요소들이 sec초 동안 이동한 후의 배열을 리턴해주세요.
rotateArray([1, 2, 3, 4, 5, 6, 7], 3) // [5, 6, 7, 1, 2, 3, 4]
rotateArray([5, 6, -2, 3, -9, 1, -8], 12) // [-2, 3, -9, 1, -8, 5, 6]
function rotateArray(belt, sec) {
// 여기에서 작업하세요.
let answer = [];
sec = sec % belt.length;
for (let i = 0; i < belt.length; i++) {
answer.push(belt[(i - sec + belt.length) % belt.length]);
}
return answer;
}
function rotateArray(belt, sec) {
for (let i = 0; i < sec; i++) {
belt.unshift(belt.pop());
}
return belt;
}
A R M T
L O I H T S
G T E
"ARMTLOIHTSGTE"
zigzag("ALGORITHMTEST", 3) // "ARMTLOIHTSGTE"
zigzag("CODECAMP", 2) // "CDCMOEAP"
zigzag("TEST", 6) // "TEST"
function zigzag(str, row) {
// 여기에서 작업하세요.
let answer = "";
if (str.length < row) {
answer += str;
} else {
answer += str[0];
let idx = row + 1;
for (let i = 1; i < Math.floor(str.length / row); i++) {
answer += str[idx];
idx += row + 1;
}
// for(let i = 1; i < Math.floor(str.length / row); i++){
// answer += str[]
// }
}
return answer;
}
function zigzag(str, row) {
// 지그재그로 만들 수 없는 조건이라면,str을 그대로 리턴
if (row === 1 || str.length < row) return str;
// row 세팅
const answer = [];
for (let i = 0; i < row; i++) answer[i] = [];
let reverse = false;
let idx = 0;
for (let i = 0; i < str.length; i++) {
answer[idx].push(str[i]);
reverse ? idx-- : idx++;
// 변환점에 도달할 때마다 push 방향 전환
if (idx === row - 1 || idx === 0) reverse = !reverse;
}
// 완성된 문자열 결합
return answer.map((a) => a.join('')).join('');
}
출처: 코드캠프