programmers) coding test 7

Yeonn·2024년 5월 13일
0

coding test

목록 보기
7/13
post-thumbnail

✔️ 코딩테스트 기초

✅ check

  • str.slice()

🌿 문자열의 뒤의 n글자

🌱 문제 설명

문자열 my_string과 정수 n이 매개변수로 주어질 때, my_string의 뒤의 n글자로 이루어진 문자열을 return 하는 solution 함수를 작성해 주세요.

🌱 제한 사항

  • my_string은 숫자와 알파벳으로 이루어져 있습니다.
  • 1 ≤ my_string의 길이 ≤ 1,000
  • 1 ≤ n ≤ my_string의 길이

🌱 입출력 예

my_stringnresult
"ProgrammerS123"11"grammerS123"
"He110W0r1d"5"W0r1d"

🌱 내 코드

const solution = (my_string, n) => {
  return my_string.slice(-1*n)
}

📍 **str.slice()

  • 첫 번째 인수로 전달받은 인덱스에 위치하는 문자부터 두 번째 인수로 전달받은 인덱스에 위치하는 문자의 바로 이전 문자까지의 부분 문자열 반환
  • 인수가 음수일 경우 대상 문자열의 가장 뒤에서부터 시작하여 문자열을 잘라내어 반환

🌿 수 조작하기 1

🌱 문제 설명

정수 n과 문자열 control이 주어집니다. control은 "w", "a", "s", "d"의 4개의 문자로 이루어져 있으며, control의 앞에서부터 순서대로 문자에 따라 n의 값을 바꿉니다.

  • "w" : n이 1 커집니다.
  • "s" : n이 1 작아집니다.
  • "d" : n이 10 커집니다.
  • "a" : n이 10 작아집니다.
    위 규칙에 따라 n을 바꿨을 때 가장 마지막에 나오는 n의 값을 return 하는 solution 함수를 완성해 주세요.

🌱 제한 사항

  • -100,000 ≤ n ≤ 100,000
  • 1 ≤ control의 길이 ≤ 100,000
    • control은 알파벳 소문자 "w", "a", "s", "d"로 이루어진 문자열입니다.

🌱 입출력 예

ncontrolresult
0"wsdawsdassw"-1

🌱 내 코드

const solution = (n, control) => {
  let answer = n;
  control.split('').forEach(el => {
    if( el === 'w'){
      answer += 1;
    }if(el === 's'){
      answer -= 1;
    }if(el === 'd'){
      answer += 10;
    }if(el === 'a'){
      answer -= 10;
    }
  })
  return answer;
}

🌱 다른 사람 풀이

// switch
function solution(n, control) {
    for(let i = 0 ; i < control.length ; i++){
        switch(control[i]) {
            case "w" : n++;break;
            case "s" : n--;break;
            case "d" : n+=10;break;
            case "a" : n-=10;break;
        }
    }
    return n;
}

// 로직 분리, reduce 활용
const operations = {
  w: (n) => n + 1,
  s: (n) => n - 1,
  d: (n) => n + 10,
  a: (n) => n - 10,
};

function solution(n, control) {
  return [...control].reduce((prev, op) => operations[op](prev), n);
}

📍 switch

  • 주어진 표현식을 평가하여 그 값과 일치하는 표현식을 갖는 case 문으로 이동, default 는 optional
switch ( 표현식 ){
	case 표현식 1:
		switch 문의 표현식과 표현식1이 일치될 경우 실행될 코드;
		break;
	case 표현식 2:
		switch 문의 표현식과 표현식2이 일치될 경우 실행될 코드;
		break;
	default: // 생략 가능
		switch 문의 표현식과 일치하는 case 가 없을 때 실행될 코드;
}

📍 arr.reduce()arr.forEach(), arr.map() 사용 비교 !

  • arr.reduce(): 배열을 순회하며 누적값을 계산하여 최종 결과를 도출할 경우
  • arr.forEach(): 단순 반복작업, 사이드이펙트가 있는 작업을 수행할 경우
  • arr.map(): 배열의 각 요소를 변환하여 새로운 배열을 생성할 경우

📍 arr.forEach()

  • 배열의 각 요소에 대해 사이드 이펙트를 일으키는 반복적인 작업을 수행할 때 사용한다. 반환값은 undefined이고 순수하게 '반복'만을 목적으로 한다. 원본 배열을 수정하거나 새로운 배열을 반환하지 않는다.

📍 arr.map()

  • 배열의 각 요소를 변환하여 새로운 배열을 생성할 때 사용한다. 반환값은 변환된 요소들로 생성된 새로운 배열이다. 각 요소를 순회하여 변환하기 때문에 기존 배열의 크기가 유지된다.

📍 arr.reduce()

  • 배열의 요소들을 순회하며 하나의 누적 값을 도출할 때 사용한다. 반환값은 누적된 '하나의 값' 이고 콜백 함수에서 반환되며 초기값 설정이 가능하다.


🌿 대소문자 바꿔서 출력하기

🌱 문제 설명

영어 알파벳으로 이루어진 문자열 str이 주어집니다. 각 알파벳을 대문자는 소문자로 소문자는 대문자로 변환해서 출력하는 코드를 작성해 보세요.

🌱 제한 사항

  • 1 ≤ str의 길이 ≤ 20
    • str은 알파벳으로 이루어진 문자열입니다.

🌱 입출력 예

입력 #1: aBcDeFg
출력 #1: AbCdEfG

🌱 내 코드

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

let input = [];

rl.on('line', function (line) {
    input = [line];
}).on('close',function(){
    str = input[0];
    let char = str.split('');
    
    let answer = char.map(el => {
        return el === el.toUpperCase() ? el.toLowerCase() : el.toUpperCase()
    })
    
    console.log(answer.join(''))
});

📍 node.js 를 활용한 코드이다 !
📍 str.toUpperCase()str.toLowerCase()

let answer = char.map(el => {
    return el === el.toUpperCase() ? el.toLowerCase() : el.toUpperCase()
})

str.toUpperCase()str.toLowerCase()를 조건문에 사용해서 비교하게 되면 대문자인지 소문자인지 확인해서 boolean값을 반환하고 조건을 확인하여 대문자인 경우 소문자로, 소문자인 경우 대문자로 변환한다.



0개의 댓글