programmers) coding test 1

Yeonn·2024년 3월 29일
0

coding test

목록 보기
1/13
post-thumbnail

✔️ 코딩테스트 입문

check

  • reduce
  • new Set()
  • slicesplice
  • replace
  • map, filter, forEach
  • 정규표현식
  • Math.sqrt()

🌿 배열의 평균값

🌱 문제 설명

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.

🌱 제한사항

  • 0 ≤ numbers의 원소 ≤ 1,000
  • 1 ≤ numbers의 길이 ≤ 100
  • 정답의 소수 부분이 .0 또는 .5인 경우만 입력으로 주어집니다.

🌱 입출력 예

numbersresult
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]5.5
[89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]94.0

🌱 내 코드

function solution(numbers) {
    let answer = numbers.reduce((acc, cur) => acc + cur) / numbers.length;
    
    return answer;
}

📌 reduce: '배열의 모든 값 합산' 활용하기

let total = [0, 1, 2, 3].reduce(
  (acc, cur) => acc + cur,  0);

객체 배열의 경우 반드시 초기 값을 지정해줘야 한다

let initialValue = 0;
let sum = [{ x: 1 }, { x: 2 }, { x: 3 }].reduce(
  (accumulator, currentValue) => accumulator + currentValue.x,
  initialValue,
);
console.log(sum); // 6

🌿 배열의 유사도

🌱 문제 설명

두 배열이 얼마나 유사한지 확인해보려고 합니다. 문자열 배열 s1과 s2가 주어질 때 같은 원소의 개수를 return하도록 solution 함수를 완성해주세요.

🌱 제한사항

  • 1 ≤ s1, s2의 길이 ≤ 100
  • 1 ≤ s1, s2의 원소의 길이 ≤ 10
  • s1과 s2의 원소는 알파벳 소문자로만 이루어져 있습니다
  • s1과 s2는 각각 중복된 원소를 갖지 않습니다.

🌱 입출력 예

s1s2result
["a", "b", "c"]["com", "b", "d", "p", "c"]2
["n", "omg"]["m", "dot"]0

🌱 내 코드

function solution(s1, s2) {
    let answer = 0;
    let commonArr = [];
    
    for( let i= 0; i <= 10; i ++){
        s1.includes(s2[i])? commonArr.push(s2[i]) : '';
    }
  
    answer = commonArr.length; 
    
    return answer;
}

🌱 다른 사람의 풀이

// filter 와 includes 활용
function solution(s1, s2) {
    const intersection = s1.filter((x) => s2.includes(x));
    return intersection.length;
}
// concat과 set 활용
function solution(s1, s2) {
  const concat = [...s1, ...s2]; // 스프래드 연산자: 참조에 의한 복사
  const setConcat = Array.from(new Set(concat)); 

  return concat.length - setConcat.length;
}

📌 new set(): 중복을 허용하지 않는 Collection, 동일한 값은 1개만 저장, 대소문자 구분

  • Set.add(value): 요소 추가
const nums = new Set([1, 2, 3]);
nums.add(4); // set(4) {1, 2, 3, 4}
  • Set.delete(value): 요소 삭제
nums.delete(1); // set(3) {2, 3, 4}
  • Set.has(value): 요소 존재 여부 확인
nums.has(3) // true
nums.has(1) // false
  • Set.size: 요소 갯수 확인
console.log(nums.size); // 3
  • Set.clear(value): 요소 전체 삭제
nums.clear() // set(0) {}

🌿 배열 원소 길이

🌱 문제 설명

문자열 배열 strlist가 매개변수로 주어집니다. strlist 각 원소의 길이를 담은 배열을 retrun하도록 solution 함수를 완성해주세요.

🌱 제한사항

  • 1 ≤ strlist 원소의 길이 ≤ 100
  • strlist는 알파벳 소문자, 대문자, 특수문자로 구성되어 있습니다.

🌱 입출력 예

strlistresult
["We", "are", "the", "world!"][2, 3, 3, 6]
["I", "Love", "Programmers."][1, 4, 12]

🌱 내 코드

function solution(strlist) {
    return strlist.map(el => el.length);
}

📌 map: 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환


🌿 점의 위치 구하기

🌱 문제 설명

사분면은 한 평면을 x축과 y축을 기준으로 나눈 네 부분입니다.

x 좌표와 y 좌표가 모두 양수이면 제1사분면에 속합니다.
x 좌표가 음수, y 좌표가 양수이면 제2사분면에 속합니다.
x 좌표와 y 좌표가 모두 음수이면 제3사분면에 속합니다.
x 좌표가 양수, y 좌표가 음수이면 제4사분면에 속합니다.
x 좌표 (x, y)를 차례대로 담은 정수 배열 dot이 매개변수로 주어집니다. 좌표 dot이 사분면 중 어디에 속하는지 1, 2, 3, 4 중 하나를 return 하도록 solution 함수를 완성해주세요.

🌱 제한사항

  • dot의 길이 = 2
  • dot[0]은 x좌표를, dot[1]은 y좌표를 나타냅니다
  • -500 ≤ dot의 원소 ≤ 500
  • dot의 원소는 0이 아닙니다.

🌱 입출력 예

dotresult
[2, 4]1
[-7, 9]2

🌱 내 코드

function solution(dot) {
    let answer = 0;
    
    if( dot[0] > 0 && dot[1] > 0){
        return answer = 1;
    }
    if( dot[0] < 0 && dot[1] > 0){
        return answer = 2;
    }
    if( dot[0] < 0 && dot[1] < 0){
        return answer = 3;
    }
    else return answer = 4;
    
    return answer;
}

🌱 다른 사람의 풀이

// 삼항연산자로 정리
function solution(dot) {
    return dot[0] > 0 ? dot[1] > 0 ? 1 : 4 : dot[1] > 0 ? 2 : 3;
}
function solution(dot) {
  // 구조분해
    const [num,num2] = dot;
    const check = num * num2 > 0; // x 가 양수인 경우
  	// 삼항연산자로 구분
    return num > 0 ? (check ? 1 : 4) : (check ? 3 : 2);
}

🌿 배열 자르기

🌱 문제 설명

정수 배열 numbers와 정수 num1, num2가 매개변수로 주어질 때, numbers의 num1번 째 인덱스부터 num2번째 인덱스까지 자른 정수 배열을 return 하도록 solution 함수를 완성해보세요.

🌱 제한사항

  • 2 ≤ numbers의 길이 ≤ 30
  • 0 ≤ numbers의 원소 ≤ 1,000
  • 0 ≤num1 < num2 < numbers의 길이

🌱 입출력 예

numbersnum1num2result
[1, 2, 3, 4, 5]13[2, 3, 4]
[1, 3, 5]12[3, 5]

🌱 내 코드

function solution(numbers, num1, num2) {
    return numbers.slice(num1, num2+1)
}

🌱 다른 사람의 풀이

function solution(numbers, num1, num2) {
    return numbers.splice(num1, num2-num1+1);
}

📌 slicesplice
slice

  • 원본 배열에 영향을 주지 않고 얕은 복사본을 새로운 배열 객체로 반환
  • arr.slice([begin[, end]])
  • begin: 시작 index end: optional, 종료 index( 본인 제외 ex: 3일 경우 index 2까지만 수행 )
  • 음수의 경우: 배열의 끝에서 부터 index 계산, end 지정하지 않을 경우 array.length로 지정 됨
  • 반환 값: 추출한 요소를 포함한 새로운 배열

splice

  • 배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경
  • array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
  • start: 시작지점 deleteCount: 지울 요소 개수 item1, item2 ... : optional, 배열에 추가할 요소 / 지정하지 않을 경우 요소 제거만 수행
  • 반환 값: 제거된 요소를 담은 배열, 아무 것도 제거하지 않았을 경우 빈 배열 반환

🌿 모음 제거

🌱 문제 설명

영어에선 a, e, i, o, u 다섯 가지 알파벳을 모음으로 분류합니다. 문자열 my_string이 매개변수로 주어질 때 모음을 제거한 문자열을 return하도록 solution 함수를 완성해주세요.

🌱 제한사항

  • my_string은 소문자와 공백으로 이루어져 있습니다.
  • 1 ≤ my_string의 길이 ≤ 1,000

🌱 입출력 예

my_stringresult
"bus""bs"
"nice to meet you""nc t mt y"

🌱 내 코드

function solution(my_string) {
    let vowels = ['a', 'e', 'i', 'o', 'u'];
    let string = [];
    let exceptVowels = [];
    
    string = Array.from(my_string);
    string.filter(el => vowels.includes(el) ?  '': exceptVowels.push(el))
        
    return exceptVowels.join('');
}

🌱 다른 사람의 풀이

function solution(my_string) {
  // a, e, i, o, u 중 일치하는([aeiou]) 모든 문자( /g)를 빈 문자('') 로 바꾼다(.replace)
    return my_string.replace(/[aeiou]/g, '');
}

📌 replace

  • replace(pattern, replacement)
  • pattern 부분은 대부분 정규식으로 많이 사용됨, 바꿀 부분 replacement: 대체될 문자열이나 함수
  • 반환 값: pattern에 해당하는 모든 부분이 replacement로 대체된 새 문자열

📌 정규 표현식
참고: https://subtlething.tistory.com/56


🌿 머쓱이의 키

🌱 문제 설명

머쓱이는 학교에서 키 순으로 줄을 설 때 몇 번째로 서야 하는지 궁금해졌습니다. 머쓱이네 반 친구들의 키가 담긴 정수 배열 array와 머쓱이의 키 height가 매개변수로 주어질 때, 머쓱이보다 키 큰 사람 수를 return 하도록 solution 함수를 완성해보세요.

🌱 제한사항

  • 1 ≤ array의 길이 ≤ 100
  • 1 ≤ height ≤ 200
  • 1 ≤ array의 원소 ≤ 200

🌱 입출력 예

arrayheightresult
[149, 180, 192, 170]1673
[180, 120, 140]1900

🌱 내 코드

function solution(array, height) {
    let count = 0;
    for ( let i = 0; i < array.length; i ++){
        if(array[i] > height) {
            count ++
        }
    }
    return count;
}

🌱 다른 사람의 풀이

function solution(array, height) {
  // filter: 새로운 배열을 반환하므로 배열을 따로 선언하지 않아도 된다.
  // return array.filter(item => item > height).length 이렇게도 가능 !

    let answer = array.filter(item => item > height);
    return answer.length;
}
// forEach
function solution(array, height) {
    let result = 0;
    array.forEach((arr) => height < arr && result++);
    return result;
}

🌿 문자열 안에 문자열

🌱 문제 설명

문자열 str1, str2가 매개변수로 주어집니다. str1 안에 str2가 있다면 1을 없다면 2를 return하도록 solution 함수를 완성해주세요.

🌱 제한사항

  • 1 ≤ str1의 길이 ≤ 100
  • 1 ≤ str2의 길이 ≤ 100
  • 문자열은 알파벳 대문자, 소문자, 숫자로 구성되어 있습니다.

🌱 입출력 예

str1str2result
"ab6CDE443fgh22iJKlmn1o""6CD"1
"ppprrrogrammers""pppp"2
"AbcAbcA""AAA"2

🌱 내 코드

function solution(str1, str2) {
    return str1.indexOf(str2) === -1 ? 2 : 1;
}

🌱 다른 사람의 풀이

function solution(str1, str2) {
    return str1.split(str2).length > 1 ? 1 : 2
}
function solution(str1, str2) {
    return str1.includes(str2) ? 1 : 2;
}

🌿 제곱수 판별

🌱 문제 설명

어떤 자연수를 제곱했을 때 나오는 정수를 제곱수라고 합니다. 정수 n이 매개변수로 주어질 때, n이 제곱수라면 1을 아니라면 2를 return하도록 solution 함수를 완성해주세요.

🌱 제한사항

  • 1 ≤ n ≤ 1,000,000

🌱 입출력 예

nresult
1441
9762

🌱 내 코드

function solution(n) {
    return Math.sqrt(n)%1 === 0 ? 1 : 2
}

📌 Math.sqrt

  • Math.sqrt(x)
  • 반환 값: x의 제곱근을 반환( √x ) / 음수일 경우 NaN 반환

📌 Number.isInteger(): 주어진 값이 정수인지 판별하여 Boolean값을 반환


🌿 순서쌍의 개수

🌱 문제 설명

순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (a, b)로 표기합니다. 자연수 n이 매개변수로 주어질 때 두 숫자의 곱이 n인 자연수 순서쌍의 개수를 return하도록 solution 함수를 완성해주세요.

🌱 제한사항

  • 1 ≤ n ≤ 1,000,000

🌱 입출력 예

nresult
206
1009

🌱 내 코드

function solution(n) {
    let count = 0;
    
    for (let i = 1; i <= n; i ++){
        if( n%i === 0){
            count ++
        }
    }
    return count;
}

0개의 댓글