프로젝트를 마무리하고, 본격적인 취업 준비를 시작하였다. 약 한 주 반동안 서류를 작성하고 운이 좋게도 곧바로 몇군데에서 면접 및 코테를 보게 되었다.
그래서 부트캠프를 하느라 잊고 있던 코테의 감을 깨우기 위해! 코테 준비를 해보려고 한다.
해당 코딩 테스트가 codeSignal에서 코딩테스트를 진행하기 때문에, 해당 플랫폼에서 연습 문제를 풀어보기로 했다.
codeSignal에 대해 잠시 소개하자면, 국내에선 프로그래머스 백준에 비해 다소 생소한 코딩 플랫폼이지만 실리콘밸리에서는 꽤나 유명한 코딩테스트 플랫폼이라고 한다.
연습 문제를 푸는 방법은 다음과 같다.
1. codeSignal에서 Arcade에 들어간다.
2. 원하는 코스를 선택한다. 처음 플랫폼을 이용하는 경우 Intro
를 추천한다.
3. 아래처럼 여러 단계가 있고 순서대로 문제를 풀면 된다.
🔥 주의할 점!
각 단계별 문제는 차례대로 풀어야 한다.
즉, n번째 문제가 잘 풀리지 않는다고, n+1번째 문제로 뛰어넘기 할 수 없다 ☠️
두 숫자의 합을 반환하는 함수를 작성하세요.
function solution(param1, param2) {
return param1 + param2;
}
function solution(year) {
return Math.ceil(year/100);
}
function solution(inputString) {
const reverseStr = inputString.split("").reverse().join("");
return inputString === reverseStr;
}
정수의 배열이 주어졌을 때, 인접한 요소의 곱 중 가장 큰 곱을 갖는 요소의 쌍을 리턴하는 함수를 작성하세요.
function solution(arr) {
let maxDobble = 0;
for (let i = 0; i < arr.length - 1; i++) {
const currentDobble = arr[i] * arr[i + 1];
if (maxDobble === 0) {
maxDobble = currentDobble;
}
maxDobble = maxDobble > currentDobble ? maxDobble : currentDobble;
}
return maxDobble;
}
n-interesting
다각형의 면적을 찾는 문제n-interesting
다각형은 n-interesting
다각형에 n-interesting
다각형을 그 둘레에 나란히 추가하여 만든다.n-interesting
다각형의 면적을 구하는 공식은 다음과 같다.Input | Output |
---|---|
2 | 5 |
3 | 13 |
function solution(n) {
return n*n + (n-1)*(n-1);
}
Input | Output |
---|---|
[6, 2, 3, 8] | 3 |
function solution(statues) {
const [minN, maxN] = [Math.min(...statues), Math.max(...statues)];
const coudBeValue = maxN - minN + 1;
return coudBeValue - statues.length;
}
sequence[i]
)가 이전 요소(sequence[i-1]
)보다 작거나 같은 경우 다음을 수행한다. → removed 되는 조건을 확인sequence[i+1]
)가 이전 요소(sequence[i-1]
)보다 작거나 같은 경우, 바로 false를 반환 → 이미 최대 한번이라는 기준을 위반했기 때문에function solution(sequence) {
let removed = 0;
for(let i = 0; i < sequence.length; i++) {
if (sequence[i] <= sequence[i - 1]) {
removed++;
if (sequence[i] <= sequence[i-2] && sequence[i+1] <= sequence[i-1]) {
return false;
}
// removed 1개 이하이면 true (= 1개만 제거했으면)
if (removed > 1) return false;
}
}
return true;
}
function solution(matrix) {
let totalPrice = 0;
for(let col = 0; col < matrix[0].length; col++) {
for (let row = 0; row < matrix.length; row++) {
if(matrix[row][col] === 0) {
break;
} else {
totalPrice += matrix[row][col];
}
}
}
return totalPrice;
}
Input | Output |
---|---|
["aba", "aa", "ad", "vcd", "aba"] | ["aba", "vcd", "aba"] |
function solution(arr) {
const lengArr = arr.map(v => v.length)
const maxLen = Math.max(...lengArr);
const resultArr = arr.filter(v => v.length === maxLen)
return resultArr;
}
commonChars
를 0으로 초기화한다.Math.min(s1Counts[char], s2Counts[char])
)을 commonChars에 더한다.//* 문자열에서 각 문자마다의 개수를 세는 함수
function getCharCount(s) {
const result = [...s].reduce((acc, char) => {
acc[char] = (acc[char] || 0) + 1;
return acc;
}, {});
return result;
}
function solution(s1, s2) {
const s1Counts = getCharCount(s1);
const s2Counts = getCharCount(s2);
let commonChars = 0;
Object.keys(s1Counts).forEach(char => {
// 만약 s2Counts에도 있으면
if(s2Counts[char]) {
// value 중 작은 값을 더한다.
commonChars += Math.min(s1Counts[char], s2Counts[char]);
}
})
return commonChars;
}
halfN
에 할당한다.i
)가 halfN
보다 작으면 firstSum
에, 크거나 같으면 secondSum
에 현재 값을 더한다.function solution(n) {
const stringN = String(n);
let [firstSum, secondSum] = [0, 0];
for(let i = 0; i < stringN.length; i++) {
const halfN = stringN.length / 2;
if (i < halfN) {
firstSum += Number(stringN[i]);
}
else {
secondSum += Number(stringN[i]);
}
}
return firstSum === secondSum;
}
-1
로 표현되며, 나무의 위치는 이동시킬 수 없다.function solution(a) {
const people = a.filter(v => v !== -1).sort((a, b) => a - b);
return a.map(value => value !== -1 ? people.shift() : value);
}
'('
를 찾는다. (가장 안쪽 괄호 처리를 위해)'('
에 해당하는 ')'
를 찾는다.function solution(input) {
while(input.includes("(")) {
let start = input.lastIndexOf("(");
let end = input.indexOf(")", start);
let reverseInput = input.substring(start + 1, end).split('').reverse().join('');
input = `${input.slice(0, start)}${reverseInput}${input.slice(end + 1)}`
}
return input;
}
Input | Output |
---|---|
[50, 60, 60, 45, 70] | [180, 105] |
function solution(a) {
let [odd, even] = [0, 0];
for(let i = 0; i < a.length; i++) {
if (i % 2 === 1) {
odd += a[i];
} else {
even += a[i];
}
}
return [even, odd];
}
Input | Output |
---|---|
["abc","ded"]] | ["****", "*abc*", "*ded*", "****"] |
'*'
를 추가한다.function solution(picture) {
const border = '*'.repeat(picture[0].length + 2);
const addBorderToPicture = picture.map(letter => `*${letter}*`);
const borderedPicture = [border, ...addBorderToPicture, border];
return borderedPicture
}
function solution(a, b) {
//
if (a.length !== b.length) return false;
//
const diffIndexes = a.map((value, i) => value !== b[i] ? i : -1).filter(index => index !== -1);
if (diffIndexes.length === 0) return true;
if (diffIndexes.length === 2) {
if (a[diffIndexes[0]] === b[diffIndexes[1]] && a[diffIndexes[1]] === b[diffIndexes[0]]) return true;
}
return false;
}
안녕하세요, 문제 풀이 잘 봤습니다.
저는 코드시그널에서 문제를 풀 수 있는 사이트가 보이지 않는데 혹시 해당 사이트가 사라진 걸까요?ㅜㅜ