Javascript로 코테를 준비하는 사람들을 위한 코딩 기초 트레이닝 코스 (3) ~ ing

osohyun0224·2023년 7월 17일
1
post-thumbnail

안녕하세요, js 코테를 공부하는 주인장입니다.
지난 시리즈 포스팅에 이어서 코딩 기초 트레이닝 코스 문제들을 정리하는 2탄입니다.

사실 문제 이름으로 h3 태그를 달아두어 사람들이 쉽게 찾을 수 있도록 작성하였는데,
태그가 30개 이상 넘어가면 오른쪽에 태그가 넘어가서 안보이더라고요...

그래서 앞으로 30문제씩 잘라서 포스팅해보려고 합니다!

비기너 코스 (2) 벨로그:)

32. 배열 만들기 1

  • 문제: 정수 n과 k가 주어졌을 때, 1 이상 n이하의 정수 중에서 k의 배수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
  • 풀이: 1이상 n 이하의 정수 중에서라고 했으므로 1부터 n까지 돌리는 반복문 1차 걸어줌 > k의 배수가 n이하여야 하므로 이에 대한 반복문도 작성(k와 곱해지는 j는 n/k의 값까지!) > 테케 돌려보니까 모든 배열 맨 앞에 null 값 들어가있음 > 배열의 첫 번째 인덱스 값 제거함수 > 통과
function solution(n, k) {
    var answer = [];
    for(let i=1; i<=n;i++){
        for(let j=1; j<=(n/k) ; j++){
            answer[j]=j*k
        }
    }
    // 테케해보니까 인덱스 맨 앞에 null값이 다 들어가있어서 
   // 배열의 첫 번째 원소를 지워 줌.
    let ans = answer.shift();
    return answer;
}
  • 왜 null이 계속 들어가 있을 까 고민했는데 gpt 선생님이 알려주셨다.

소현아 js는 자바가 아니야.... 어휴

33. 공백으로 구분하기 1

  • 문제 : 단어가 공백 한 개로 구분되어 있는 문자열 my_string이 매개변수로 주어질 때, my_string에 나온 단어를 앞에서부터 순서대로 담은 문자열 배열을 return 하는 solution 함수를 작성해 주세요.

  • 코드 : ㅎㅎ 이정도는 1초컷

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

34. 문자 이어 붙여 문자열 만들기

  • 문제: 문자열 my_string과 정수 배열 index_list가 매개변수로 주어집니다. my_string의 index_list의 원소들에 해당하는 인덱스의 글자들을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.
  • 코드:
function solution(my_string, index_list) {
    var answer = '';
    let ans = my_string.split("");
    for(let i=0;i<index_list.length;i++){
        answer+=ans[index_list[i]];
    }
    return answer;
}

35. 주사위 게임 1

  • 문제: 1부터 6까지 숫자가 적힌 주사위가 두 개 있습니다. 두 주사위를 굴렸을 때 나온 숫자를 각각 a, b라고 했을 때 얻는 점수는 다음과 같습니다.
    a와 b가 모두 홀수라면 a2 + b2 점을 얻습니다.
    a와 b 중 하나만 홀수라면 2 × (a + b) 점을 얻습니다.
    a와 b 모두 홀수가 아니라면 |a - b| 점을 얻습니다.
    두 정수 a와 b가 매개변수로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.

  • 풀이 :
    (1) 우선 절대값 함수 Math.abs();
    (2) a,b 둘중 하나만 홀수라면을 어떻게 줄일까 ... 고민하다가 or을 썼는데 and로 인식됨 ;;
    이걸 찾아봣는데 둘의 홀짝성이 다른 것으로 구분하면 더 쉽게 줄일 수 있더라
    바로

 else if (a % 2 !== b % 2){ // a와 b의 홀짝성이 다를 경우
        answer = 2 * (a + b);
    }

위와 같이 작성하면 더 쉽게 조건문을 줄일 수 있다. 나머지 값이 다른 것으로 나누다니 ㄹㅇ ... 저런 생각은 어떻게 하는 걸까 ㅜㅜ

function solution(a, b) {
    var answer = 0;
    if(a%2!==0 && b%2!=0){
        answer=a**2+b**2;
    }
    else if(a%2==0 && b%2!=0){
        answer=2*(a+b);
    }
    else if(a%2!=0 && b%2==0){
        answer=2*(a+b);
    }
    else if(a%2==0 && b%2==0){
         answer=Math.abs(a-b);
    }
    return answer;
}

36. 배열에서 문자열 대소문자 변환하기

  • 문제: 문자열 배열 strArr가 주어집니다. 모든 원소가 알파벳으로만 이루어져 있을 때, 배열에서 홀수번째 인덱스의 문자열은 모든 문자를 대문자로, 짝수번째 인덱스의 문자열은 모든 문자를 소문자로 바꿔서 반환하는 solution 함수를 완성해 주세요.

  • 코드: 배열에 원소 넣는거는 push() 로 넣어주어야 한다!! 문자열이랑 헷갈리지 말기

function solution(strArr) {
    var answer = [];
    for(let i=0; i<strArr.length;i++){
        if(i%2!=0){
          answer.push(strArr[i].toUpperCase());
           }
        else {
           answer.push(strArr[i].toLowerCase());
        }
    }
    return answer;
}

37. 배열의 원소만큼 추가하기

  • 문제: 아무 원소도 들어있지 않은 빈 배열 X가 있습니다. 양의 정수 배열 arr가 매개변수로 주어질 때, arr의 앞에서부터 차례대로 원소를 보면서 원소가 a라면 X의 맨 뒤에 a를 a번 추가하는 일을 반복한 뒤의 배열 X를 return 하는 solution 함수를 작성해 주세요.
  • 코드:
function solution(arr) {
    var answer = [];
    for(let i=0; i<arr.length;i++){
        for(let j=0; j<arr[i]; j++){
            answer.push(arr[i]);
        }
    }
    return answer;
}

38. 뒤에서 5등 위로

  • 문제: 정수로 이루어진 리스트 num_list가 주어집니다. num_list에서 가장 작은 5개의 수를 제외한 수들을 오름차순으로 담은 리스트를 return하도록 solution 함수를 완성해주세요.
  • 코드:
function solution(num_list) {
    var answer = [];
    num_list.sort((a,b)=>a-b);
    answer=num_list.slice(5);
    return answer;
}
  • js에서 오름차순!!
    nums.sort((a, b) => a - b);
  • 내림차순!!
    nums.sort((a, b) => b - a);

39. 부분 문자열인지 확인하기

  • 문제: 부분 문자열이란 문자열에서 연속된 일부분에 해당하는 문자열을 의미합니다. 예를 들어, 문자열 "ana", "ban", "anana", "banana", "n"는 모두 문자열 "banana"의 부분 문자열이지만, "aaa", "bnana", "wxyz"는 모두 "banana"의 부분 문자열이 아닙니다.
    문자열 my_string과 target이 매개변수로 주어질 때, target이 문자열 my_string의 부분 문자열이라면 1을, 아니라면 0을 return 하는 solution 함수를 작성해 주세요.
  • 코드:
function solution(my_string, target) {
    return Number(my_string.includes(target));
}

주어진 문자열에 다른 문자열이 포함되어 있는지 여부를 확인합니다.
" include()"함수

  • 예시 주어진 문자열에 @가 포함되어있는지 확인하는 과정
    let email = 'admin@example.com';
    console.log(email.includes('@'));

40. 배열 비교하기

  • 문제:이 문제에서 두 정수 배열의 대소관계를 다음과 같이 정의합니다.
    두 배열의 길이가 다르다면, 배열의 길이가 긴 쪽이 더 큽니다.
    배열의 길이가 같다면 각 배열에 있는 모든 원소의 합을 비교하여 다르다면 더 큰 쪽이 크고, 같다면 같습니다.
    두 정수 배열 arr1과 arr2가 주어질 때, 위에서 정의한 배열의 대소관계에 대하여 arr2가 크다면 -1, arr1이 크다면 1, 두 배열이 같다면 0을 return 하는 solution 함수를 작성해 주세요.
  • 코드:
function solution(arr1, arr2) {
    var answer = 0;
    let a=arr1.length;
    let b=arr2.length;
    let sum1=0;
    let sum2=0;
    if(a>b) answer=1;
    else if(a<b) answer=-1;
    else if(a==b){
        for(let i=0; i<arr1.length;i++){
            sum1+=arr1[i];
        }
        for(let j=0; j<arr2.length;j++){
            sum2+=arr2[j];
        }
        if(sum1>sum2) answer=1;
        else if(sum1<sum2) answer=-1;
        else answer=0;
    }
    return answer;
}

41. 문자열 바꿔서 찾기

  • 문제: 문자 "A"와 "B"로 이루어진 문자열 myString과 pat가 주어집니다. myString의 "A"를 "B"로, "B"를 "A"로 바꾼 문자열의 연속하는 부분 문자열 중 pat이 있으면 1을 아니면 0을 return 하는 solution 함수를 완성하세요.
  • 풀이:
function solution(myString, pat) {
    var answer = 0;
    myString = myString.split('A').join('temp');
    myString = myString.split('B').join('A');
    myString = myString.split('temp').join('B');
    
    return Number(myString.includes(pat));
}

myString의 "A"를 "B"로, "B"를 "A"로 바꾸는 걸 어떻게 해야할지 고민하다가.
str = str.split('A').join('temp'); // 모든 A를 임시 문자열로 바꿉니다.
str = str.split('B').join('A'); // 모든 B를 A로 바꿉니다.
str = str.split('temp').join('B'); // 임시 문자열을 모두 B로 바꿉니다
위의 방법을 알게 되었고 적용하였다. 아래에 다른 사람들의 풀이가 궁금해졌다.

  • 다른 사람의 풀이 :
    대부붕의 패턴이 주어진 문자열을 배열로 바꾸고 각 인덱스에 해당하는 애들각각을 바꿔주고 다시 join함수써서 붙이고 포함되어있는지 파악하는 방식을 진행했다.

42. 뒤에서 5등까지

  • 문제: 정수로 이루어진 리스트 num_list가 주어집니다. num_list에서 가장 작은 5개의 수를 오름차순으로 담은 리스트를 return하도록 solution 함수를 완성해주세요.
  • 풀이:
function solution(num_list) {
    var answer = [];
    num_list.sort((a,b)=>a-b);
    answer=num_list.slice(0,5);
    return answer;
}

43. 공백으로 구분하기 2

  • 문제 단어가 공백 한 개 이상으로 구분되어 있는 문자열 my_string이 매개변수로 주어질 때, my_string에 나온 단어를 앞에서부터 순서대로 담은 문자열 배열을 return 하는 solution 함수를 작성해 주세요.

  • 코드:

function solution(my_string) {
    var answer = my_string.split(" ");
    let str=[];
    for(let i=0;i<answer.length;i++){
        if(answer[i] !==""){
            str.push(answer[i]);
    } 
}
    return str;
}

44. 원하는 문자열 찾기

  • 문제: 알파벳으로 이루어진 문자열 myString과 pat이 주어집니다. myString의 연속된 부분 문자열 중 pat이 존재하면 1을 그렇지 않으면 0을 return 하는 solution 함수를 완성해 주세요.
    단, 알파벳 대문자와 소문자는 구분하지 않습니다.
  • 코드:
function solution(myString, pat) {
    var answer = 0;
    myString=myString.toLowerCase();
    pat=pat.toLowerCase();
    if(myString.includes(pat)){answer=1;}
    return answer;
}

45. 배열의 원소 삭제하기

  • 문제: 정수 배열 arr과 delete_list가 있습니다. arr의 원소 중 delete_list의 원소를 모두 삭제하고 남은 원소들은 기존의 arr에 있던 순서를 유지한 배열을 return 하는 solution 함수를 작성해 주세요.

  • 코드: 내가 푼 코드이다. for문을 통해 arr 배열의 각 원소를 검사하며, 해당 원소가 delete_list에 포함되어 있지 않은 경우 answer 배열에 추가한다.

function solution(arr, delete_list) {
    var answer = [];
    for(let i=0; i<arr.length;i++){
        if(!delete_list.includes(arr[i])){
          answer.push(arr[i]);
            
        }
    }
    return answer;
}
  • 다른 사람들의 풀이 : 같은 방법을 사용하면서 filter 함수를 통해 더 간결하게 표현한다.
function solution(arr, delete_list) {
    var answer = arr.filter(item => !delete_list.includes(item));
    return answer;
}

46. 부분 문자열 이어 붙여 문자열 만들기

  • 문제: 길이가 같은 문자열 배열 my_strings와 이차원 정수 배열 parts가 매개변수로 주어집니다. parts[i]는 [s, e] 형태로, my_string[i]의 인덱스 s부터 인덱스 e까지의 부분 문자열을 의미합니다. 각 my_strings의 원소의 parts에 해당하는 부분 문자열을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.
  • 코드: substring() 함수 사용 :인덱스 s에서 e까지의 부분 문자열을 얻을 수 있음.
function solution(my_strings, parts) {
    var answer = '';
    for(let i=0; i<my_strings.length;i++){
         let s = parts[i][0];
         let e = parts[i][1];
         answer+=my_strings[i].substring(s,e+1);
        }
    return answer;
}

47. 0 떼기

  • 문제:
    정수로 이루어진 문자열 n_str이 주어질 때, n_str의 가장 왼쪽에 처음으로 등장하는 0들을 뗀 문자열을 return하도록 solution 함수를 완성해주세요.
  • 코드: n_str을 parseInt() 함수를 이용하여 정수로 변환한 후, 다시 toString() 메소드를 이용하여 문자열로 변환하여 반환한다. 이 과정에서 n_str의 가장 왼쪽에 위치한 '0'들이 제거된다.
function solution(n_str) {
    var answer = '';
    answer=parseInt(n_str).toString();
    return answer;
}

48. 등차수열의 특정한 항만 더하기

  • 문제: 두 정수 a, d와 길이가 n인 boolean 배열 included가 주어집니다. 첫째항이 a, 공차가 d인 등차수열에서 included[i]가 i + 1항을 의미할 때, 이 등차수열의 1항부터 n항까지 included가 true인 항들만 더한 값을 return 하는 solution 함수를 작성해 주세요.

  • 코드: 딱히 어려운건 없음 넘어감

function solution(a, d, included) {
    var answer = 0; 
    for(let i=0; i<included.length;i++){
        if(included[i]==true){
            answer+=a+(i)*d;
        }
    }
    return answer;
}

49. 주사위 게임 2

  • 문제: 1부터 6까지 숫자가 적힌 주사위가 세 개 있습니다. 세 주사위를 굴렸을 때 나온 숫자를 각각 a, b, c라고 했을 때 얻는 점수는 다음과 같습니다.
    세 숫자가 모두 다르다면 a + b + c 점을 얻습니다.
    세 숫자 중 어느 두 숫자는 같고 나머지 다른 숫자는 다르다면 (a + b + c) × (a2 + b2 + c2 )점을 얻습니다.
    세 숫자가 모두 같다면 (a + b + c) × (a2 + b2 + c2 ) × (a3 + b3 + c3 )점을 얻습니다.
    세 정수 a, b, c가 매개변수로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.
  • 코드 :
function solution(a, b, c) {
    var answer = 0;
    if (a != b && b != c && a != c) {
        answer = a + b + c;
    } else if (a == b && b == c) {
        answer = (a + b + c) * (a ** 2 + b ** 2 + c ** 2) * (a ** 3 + b ** 3 + c ** 3);
    } else {
        answer = (a + b + c) * (a ** 2 + b ** 2 + c ** 2);
    }
    return answer;
}

50. 9로 나눈 나머지

  • 문제: 음이 아닌 정수를 9로 나눈 나머지는 그 정수의 각 자리 숫자의 합을 9로 나눈 나머지와 같은 것이 알려져 있습니다.
    이 사실을 이용하여 음이 아닌 정수가 문자열 number로 주어질 때, 이 정수를 9로 나눈 나머지를 return 하는 solution 함수를 작성해주세요.
  • 코드:
function solution(number) {
    var answer = 0;
    for (let i = 0; i < number.length; i++) {
        answer += parseInt(number[i], 10); 
    }
    return answer % 9; 
}

51. 가까운 1 찾기

  • 문제: 정수 배열 arr가 주어집니다. 이때 arr의 원소는 1 또는 0입니다. 정수 idx가 주어졌을 때, idx보다 크면서 배열의 값이 1인 가장 작은 인덱스를 찾아서 반환하는 solution 함수를 완성해 주세요. 단, 만약 그러한 인덱스가 없다면 -1을 반환합니다.
  • 코드
function solution(arr, idx) {
    var answer = 0;
    for(let i=idx ;i <arr.length;i++){
        if(arr[i]==1){
            answer=i;
            break;
        }
        else{answer=-1;}
    }
    return answer;
}

52. 모스부호(1)

  • 문제: 머쓱이는 친구에게 모스부호를 이용한 편지를 받았습니다. 그냥은 읽을 수 없어 이를 해독하는 프로그램을 만들려고 합니다. 문자열 letter가 매개변수로 주어질 때, letter를 영어 소문자로 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.
    모스부호는 다음과 같습니다.
morse = { 
    '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
    '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
    '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
    '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
    '-.--':'y','--..':'z'
}
  • 코드: javascript 객체 사용!
function solution(letter) {
    var answer = '';
    //javascript 객체 사용
    var morse = {
        '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
        '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
        '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
        '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
        '-.--':'y','--..':'z'
    };
    var morseLetters = letter.split(' ');
    for(var i=0; i<morseLetters.length; i++){
        answer += morse[morseLetters[i]];
    }
    return answer;
}

53. 콜라츠 수열 만들기

  • 문제: 모든 자연수 x에 대해서 현재 값이 x이면 x가 짝수일 때는 2로 나누고, x가 홀수일 때는 3 * x + 1로 바꾸는 계산을 계속해서 반복하면 언젠가는 반드시 x가 1이 되는지 묻는 문제를 콜라츠 문제라고 부릅니다.
    그리고 위 과정에서 거쳐간 모든 수를 기록한 수열을 콜라츠 수열이라고 부릅니다.
    계산 결과 1,000 보다 작거나 같은 수에 대해서는 전부 언젠가 1에 도달한다는 것이 알려져 있습니다.
    임의의 1,000 보다 작거나 같은 양의 정수 n이 주어질 때 초기값이 n인 콜라츠 수열을 return 하는 solution 함수를 완성해 주세요.
  • 코드:
function solution(n) {
    var answer = [];
    while(n != 1){
        answer.push(n);
        if(n % 2 == 0){
            n = n / 2;
        } else {
            n = 3 * n + 1;
        }
    }
    answer.push(1); 
    return answer;
}

54. 날짜 비교하기

  • 문제: 정수 배열 date1과 date2가 주어집니다. 두 배열은 각각 날짜를 나타내며 [year, month, day] 꼴로 주어집니다. 각 배열에서 year는 연도를, month는 월을, day는 날짜를 나타냅니다.
    만약 date1이 date2보다 앞서는 날짜라면 1을, 아니면 0을 return 하는 solution 함수를 완성해 주세요.
  • 코드:
function solution(date1, date2) {
    var answer = 0;
    for(let i=0; i<3;i++){
            if( date1[0]<date2[0]){answer=1;}
            else if (date1[0]==date2[0] && date1[1]<date2[1]){answer=1;}
            else if (date1[0]==date2[0] && date1[1]==date2[1] && date1[2]<date2[2]){answer=1;}
        }
    return answer;
}

55. 커피 심부름

  • 문제: 팀의 막내인 철수는 아메리카노와 카페 라테만 판매하는 카페에서 팀원들의 커피를 사려고 합니다. 아메리카노와 카페 라테의 가격은 차가운 것과 뜨거운 것 상관없이 각각 4500, 5000원입니다. 각 팀원에게 마실 메뉴를 적어달라고 하였고, 그 중에서 메뉴만 적은 팀원의 것은 차가운 것으로 통일하고 "아무거나"를 적은 팀원의 것은 차가운 아메리카노로 통일하기로 하였습니다.
    각 직원이 적은 메뉴가 문자열 배열 order로 주어질 때, 카페에서 결제하게 될 금액을 return 하는 solution 함수를 작성해주세요. order의 원소는 아래의 것들만 들어오고, 각각의 의미는 다음과 같습니다.
  • 코드: 무지성 노가다 인데 이 문제는 이렇게 밖에 못 풀더라..
function solution(order) {
    var answer = 0;
    for(let i=0; i<order.length;i++){
        if(order[i] == "iceamericano" || order[i] == "americanoice" || 
           order[i] == "hotamericano" || order[i] == "americanohot" || 
           order[i] == "americano" || order[i] == "anything") {
            answer += 4500;
        } else if(order[i] == "icecafelatte" || order[i] == "cafelatteice" || 
                  order[i] == "hotcafelatte" || order[i] == "cafelattehot" || 
                  order[i] == "cafelatte") {
            answer += 5000;
        }
    }
    return answer;
}
profile
학부생 Frontend Developer

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

글 잘 봤습니다, 많은 도움이 되었습니다.

답글 달기