✔️ 코딩테스트 입문

check

  • 틸트 문법: ~, ~~
  • Array.from(string), [...string], string.split('')
  • let a of b
  • repeat(count)
  • split(separator, limit)
  • toUpperCase(), toLowerCase()

🌿 양꼬치

🌱 문제 설명

머쓱이네 양꼬치 가게는 10인분을 먹으면 음료수 하나를 서비스로 줍니다. 양꼬치는 1인분에 12,000원, 음료수는 2,000원입니다. 정수 n과 k가 매개변수로 주어졌을 때, 양꼬치 n인분과 음료수 k개를 먹었다면 총얼마를 지불해야 하는지 return 하도록 solution 함수를 완성해보세요.

🌱 제한 사항

  • 0 < n < 1,000
  • n / 10 ≤ k < 1,000
  • 서비스로 받은 음료수는 모두 마십니다.

🌱 입출력 예

nkresult
103124,000
646768,000

🌱 내 코드

function solution(n, k) {
    let service = 0;
    
    if( n >= 10 ) {
        service = Math.floor(n / 10)
    }
    
    return (n * 12000) + (k-service)* 2000;
}

🌱 다른 사람의 풀이

function solution(n, k) {
    k-=~~(n/10); // 틸트 문법
    if (k < 0) k = 0;
    return n*12000+k*2000;
}

📌 틸트 문법

  • ~: -(n+1)
  • ~~: Math.floor와 비슷
    양수에서는 동일하게 작동하나, 음수의 경우 Math.floor(-1.1)는 -2 출력, ~~(-1.1)는 -1 출력

🌿 아이스 아메리카노

🌱 문제 설명

머쓱이는 추운 날에도 아이스 아메리카노만 마십니다. 아이스 아메리카노는 한잔에 5,500원입니다. 머쓱이가 가지고 있는 돈 money가 매개변수로 주어질 때, 머쓱이가 최대로 마실 수 있는 아메리카노의 잔 수와 남는 돈을 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.

🌱 제한 사항

  • 0 < money ≤ 1,000,000

🌱 입출력 예

moneyresult
5,500[1, 0]
15,000[2, 4000]

🌱 내 코드

function solution(money) {
    let price = 5500;
    let result = [0, 0]
    
    result[0] = Math.floor(money / price)
    result[1] = money % price;
    
    return result;
}

🌱 다른 사람의 풀이

function solution(money) {
    return [Math.floor(money / 5500), money % 5500];
}

따로 배열을 선언하지 않고 바로 반환 값으로 작성해도 된다 !


🌿 문자열 뒤집기

🌱 문제 설명

문자열 my_string이 매개변수로 주어집니다. my_string을 거꾸로 뒤집은 문자열을 return하도록 solution 함수를 완성해주세요.

🌱 제한 사항

  • 1 ≤ my_string의 길이 ≤ 1,000

🌱 입출력 예

my_stringreturn
"jaron""noraj"
"bread""daerb"

🌱 내 코드

function solution(my_string) {
    return Array.from(my_string).reverse().join('');
}

🌱 다른 사람의 풀이

function solution(my_string) {
    var answer = [...my_string].reverse().join("");
    return answer;
}

function solution(my_string) {
    return my_string.split('').reverse().join('');
}

📌 문자열을 배열로 변환하기

  • Array.from(string)
  • [...string]
  • string.split('')

🌿 삼각형의 완성조건

🌱 문제 설명

선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.

가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.
삼각형의 세 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 세 변으로 삼각형을 만들 수 있다면 1, 만들 수 없다면 2를 return하도록 solution 함수를 완성해주세요.

🌱 제한 사항

  • sides의 원소는 자연수입니다.
  • sides의 길이는 3입니다.
  • 1 ≤ sides의 원소 ≤ 1,000

🌱 입출력 예

sidesresult
[1, 2, 3]2
[3, 6, 2]2
[199, 72, 222]1

🌱 내 코드

function solution(sides) {
    sides.sort((a, b)=> a - b)
    
    return sides[0] + sides[1] > sides[2] ? 1 : 2
}

🌱 다른 사람의 풀이

function solution(sides) {
    const [long, a, b] = sides.sort((a,b) => b-a);

    return long < a + b ? 1 : 2
}

구조 분해 할당과 명시적인 변수명을 통해 파악이 좀 더 용이하다 !


🌿 짝수 홀수 개수

🌱 문제 설명

정수가 담긴 리스트 num_list가 주어질 때, num_list의 원소 중 짝수와 홀수의 개수를 담은 배열을 return 하도록 solution 함수를 완성해보세요.

🌱 제한 사항

  • 1 ≤ num_list의 길이 ≤ 100
  • 0 ≤ num_list의 원소 ≤ 1,000

🌱 입출력 예

num_listresult
[1, 2, 3, 4, 5][2, 3]
[1, 3, 5, 7][0, 4]

🌱 내 코드

function solution(num_list) {
  let odd = [];
  let even = [];
  
  num_list.forEach((el) => el % 2 === 0? even.push(el) : odd.push(el))
  
  return [even.length, odd.length]
}

🌱 다른 사람의 풀이

function solution(num_list) {
    var answer = [0,0];

    for(let a of num_list){
        answer[a%2] += 1
    }

    return answer;
}

📌 let a of b

const iterable = [1,2,3];
for (let value of iterable) {
    console.log(value);
}
  • value: 반복을 돌면서 각각의( 서로 다른 ) 값을 value에 저장
  • iterable: 반복할 수 있는 객체( 배열, 문자열, arguments 등 )

🌿 문자 반복 출력하기

🌱 문제 설명

문자열 my_string과 정수 n이 매개변수로 주어질 때, my_string에 들어있는 각 문자를 n만큼 반복한 문자열을 return 하도록 solution 함수를 완성해보세요.

🌱 제한 사항

  • 2 ≤ my_string 길이 ≤ 5
  • 2 ≤ n ≤ 10
  • "my_string"은 영어 대소문자로 이루어져 있습니다.

🌱 입출력 예

my_stringnresult
"hello"3"hhheeellllllooo"

🌱 내 코드

const solution = (my_string, n) => {
  const strArr = Array.from(my_string);
  let multipled = [];
  
  strArr.forEach((el) => {for(let i = 0; i < n; i ++){multipled.push(el)}})
  
  return multipled.join('')
}

🌱 다른 사람의 풀이

 function solution(my_string, n) {
    var answer = [...my_string].map(v => v.repeat(n)).join("");
    console.log(answer);
    return answer;
}

📌 repeat()

  • str.repeat(count): 'str'을 count 만큼 반복해 붙인 새로운 문자열을 반환
  • count는 정수여야 하고 만약 3.2 등을 전달하여도 정수로 변환하여 수행된다. ( 3.2 -> 3 )

🌿 특정 문자 제거하기

🌱 문제 설명

문자열 my_string과 문자 letter이 매개변수로 주어집니다. my_string에서 letter를 제거한 문자열을 return하도록 solution 함수를 완성해주세요.

🌱 제한 사항

  • 1 ≤ my_string의 길이 ≤ 100
  • letter은 길이가 1인 영문자입니다.
  • my_string과 letter은 알파벳 대소문자로 이루어져 있습니다.
  • 대문자와 소문자를 구분합니다.

🌱 입출력 예

my_stringletterresult
"abcdef""f""abcde"
"BCBdbe""B""Cdbe"

🌱 내 코드

const solution = (my_string, letter) => {
  let strArr = Array.from(my_string)
  strArr = strArr.filter((el) => el !== letter )
  
  return strArr.join('');
}

console.log(solution("abcdef", 'f'))

🌱 다른 사람의 풀이

// 1. split
function solution(my_string, letter) {
    const answer = my_string.split(letter).join('')
    return answer;
}

// 2. replace
function solution(my_string, letter) {
    return my_string.replaceAll(letter, "");
}

// 3. 정규 표현식
function solution(my_string, letter) {
    let reg = new RegExp(letter, 'g');
    return my_string.replace(reg, '');
}

📌 split(separator, limit)

  • separator(optional): 원본 문자열을 끊을 때 사용하는 기준점, 생략할 경우 문자마다 끊어서 반환
  • limit(optional): 끊어진 문자열의 최대 개수
    • const greeting = 'hello';
      greeting.split('', 3) // [h,e,l]
  • 반환 값: 주어진 문자열을 separator마다 끊은 부분 문자열을 담은 배열

🌿 숨어있는 숫자의 덧셈 (1)

🌱 문제 설명

문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

🌱 제한 사항

  • 1 ≤ my_string의 길이 ≤ 1,000
  • my_string은 소문자, 대문자 그리고 한자리 자연수로만 구성되어있습니다.

🌱 입출력 예

my_stringresult
"aAb1B2cC34oOp"10
"1a2b3c4d123"16

🌱 내 코드

function solution(my_string) {
    let numArr = [];
    let strArr = Array.from(my_string);
    strArr.forEach(el => {
      let num = Number(el);
      isNaN(num) ? '' : numArr.push(num)})
    
    return numArr.reduce((acc, cur) => acc + cur)
}

🌱 다른 사람의 풀이

function solution(my_string) {
  // reduce로 숫자이면 합산하고 아니면 무시한다. 1번의 반복
    return [...my_string].reduce((acc,cur)=>Number(cur) ? +acc + +cur : acc, 0)
}

function solution(my_string) {
  // replace와 정규 표현식으로 숫자만 변환 후 reduce로 합산
    const answer = my_string.replace(/[^0-9]/g, '')
                            .split('')
                            .reduce((acc, curr) => acc + Number(curr), 0);
    return answer;
}

🌿 대문자와 소문자

🌱 문제 설명

문자열 my_string이 매개변수로 주어질 때, 대문자는 소문자로 소문자는 대문자로 변환한 문자열을 return하도록 solution 함수를 완성해주세요.

🌱 제한 사항

  • 1 ≤ my_string의 길이 ≤ 1,000
  • my_string은 영어 대문자와 소문자로만 구성되어 있습니다.

🌱 입출력 예

my_stringresult
"cccCCC""CCCccc"
"abCdEfghIJ""ABcDeFGHij"

🌱 내 코드

const solution = (my_string) => {
  let result = [];
  
  for(let i = 0; i < my_string.length; i ++){
    if( my_string[i] === my_string[i].toUpperCase()){
      result.push(my_string[i].toLowerCase())
    }
    if( my_string[i] === my_string[i].toLowerCase()){
      result.push(my_string[i].toUpperCase())
    }
  }
  
  return result.join('');
};

🌱 다른 사람의 풀이

function solution(my_string) {
    var answer = '';
    for (let c of my_string) answer += c === c.toLowerCase() ? c.toUpperCase() : c.toLowerCase();
    return answer;
}

📌 toUpperCase()toLowerCase()

  • toUpperCase(): 문자열을 대문자로 변환하여 반환/ 이미 대문자인 경우 true 반환
  • toLowerCase(): 문자열을 소문자로 변환하여 반환/ 이미 소문자인 경우 true 반환
let greeting = 'hello';
greeting.toUpperCase();
const check = () => {
  console.log(greeting === greeting.toUpperCase()) // false
}

🌿 가위바위보

🌱 문제 설명

가위는 2 바위는 0 보는 5로 표현합니다. 가위 바위 보를 내는 순서대로 나타낸 문자열 rsp가 매개변수로 주어질 때, rsp에 저장된 가위 바위 보를 모두 이기는 경우를 순서대로 나타낸 문자열을 return하도록 solution 함수를 완성해보세요.

🌱 제한 사항

  • 0 < rsp의 길이 ≤ 100
  • rsp와 길이가 같은 문자열을 return 합니다.
  • rsp는 숫자 0, 2, 5로 이루어져 있습니다.

🌱 입출력 예

rspresult
"2""0"
"205""052"

🌱 내 코드

const solution = (rsp) => {
  return Array.from(rsp).map((el) => { return el === '2' ? '0' : el === '0' ? '5' : '2' }).join('')
}

🌱 다른 사람 풀이

// 각각 대응하는 것이 있을 경우 객체를 사용하여 좀 더 명시적으로 표현할 수 있다.
function solution(rsp) {
    let arr = {
        2: 0,
        0: 5,
        5: 2
    };
  var answer = [...rsp].map(v => arr[v]).join("");
  return answer;
}

0개의 댓글

Powered by GraphCDN, the GraphQL CDN