자바스크립트 - 알고리즘 문제 풀이

JavaScript
2025-12-04

프로그래머스 코테

Lv.1


2. 푸드파이터 대회

  • 문제설명

  • 수웅이가 준비한 음식의 양을 칼로리가 적은 순서대로 나타내는 정수 배열 food가 주어졌을 때, 대회를 위한 음식의 배치를 나타내는 문자열을 return 하는 solution 함수를 완성해주세요.

  • 입출력 예

  • food result
    [1, 3, 4, 6] "1223330333221"
    [1, 7, 1, 2] "111303111"
  • 내 문제 풀이

function solution(food) {
    var answer = '';
    for(let i=1; i<food.length; i++){
        // food[i]를 %2로 나눈값이 0이면 food[i]/2한 만틈 반복하고
        // food[i]를 %2로 나눈값이 1이면 food[i]-1/2한 만큼 반복하게
        let count =0;
        if(food[i]%2===0){
            count=food[i]/2
            for(let j=0; j<count; j++){
            answer+=`${i}`          
            }
        }else{
            count=(food[i] -1) /2
             for(let j=0; j<count; j++){
            answer+=`${i}`          
            }     
        }
    }
    let reverse=answer.split('').reverse().join('')

    console.log('reverse',reverse)
    console.log('answer',answer)
    return answer+'0'+reverse;
}

function solution(food) {
    let left = '';

    for (let i = 1; i < food.length; i++) {
        let count = Math.floor(food[i] / 2);
        left += String(i).repeat(count);
    }

    const right = left.split('').reverse().join('');
    return left + '0' + right;
}
  • GPT가 추천해준 문제풀이
function solution(food) {
    let left = '';

    for (let i = 1; i < food.length; i++) {
        let count = Math.floor(food[i] / 2);
        left += String(i).repeat(count);
    }

    const right = left.split('').reverse().join('');
    return left + '0' + right;
}
  • 알아야할 메서드 - repeat & Math.floor

// repeat()는 문자열을 원하는 횟수만큼 반복해서 붙여주는 문자열 메서드야.
// 반복문(for) 없이도 문자열을 여러 번 이어붙일 수 있어서 깔끔하고 빠르게 쓸 수 있음

// 예시코드 
"3".repeat(4)   // "3333"
"a".repeat(2)   // "aa"
"abc".repeat(3) // "abcabcabc"

--- 

// Math.floor는 숫자 내림

// 예시코드 Math.floor(3.9) // 3

1. 약수의 개수와 덧셈

  • 문제설명

  • 두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.

  • 입출력 예

  • left right result
    13 17 43
    24 27 52
  • 내 문제 풀이

function solution(left, right) {
    var answer = 0;
    // left부터 rigth까지 모든수중에서
    // 약수의 개수가 짝수 홀수 인지 일단 파악할것
    for(let i=left; i<=right; i++){
        let 약수의개수=0;
        for(let j=1; j<=i; j++){         
         // i는 고정된수 13라면
         // j가 1씩 늘어나면서 i  j가 0이되면 약수임    
            약수의개수 = i % j=== 0 ? 약수의개수+1 : 약수의개수
        }
        // 약수의 개수가 짝수일때는 더하고 홀수이면 빼고
        answer= 약수의개수 % 2===0 ? answer+i : answer-i  
    }
    return answer;
}
  • GPT가 추천해준 문제풀이
function solution(left, right) {
    let answer = 0;
    for(let i = left; i <= right; i++){
        // i가 제곱수인지 체크
        answer += Number.isInteger(Math.sqrt(i)) ? -i : i;
    }
    return answer;
}

0. 자릿수 더하기

  • 문제설명

  • 자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.

  • 예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

  • 입출력 예

  • N answer
    123 6
    987 24
  • 내 문제 풀이

function solution(n)
{
    var answer = 0;
    const str=n.toString()
    const array=str.split('')
    for(let i=0; i<array.length; i++){
        answer+=Number(array[i])    
    }
    return answer;
}
  • GPT가 추천해준 문제풀이
function solution(n) {
  return String(n).split('').reduce((a, b) => a + +b, 0);
}

Lv.0

22. 세로읽기

  • 문제설명

  • 문자열 my_string과 두 정수 m, c가 주어집니다.

  • my_string을 한 줄에 m 글자씩 가로로 적었을 때 왼쪽부터 세로로 c번째 열에 적힌 글자들을 문자열로 return 하는 solution 함수를 작성해 주세요.

  • 입출력 예

  • my_string m c result
    "ihrhbakrfpndopljhygc" 4 2 "happy"
    "programmers" 1 1 "programmers"
  • 내 문제 풀이

function solution(my_string, m, c) {
    var answer = '';
    // 문자열 my_string
    // 정수 m,c 일때
    // my_string를 한줄에 m글자씩 가로로 적을때
    // 왼쪽부터 세로로 c열에 적힌 글자를 리턴하는 함수
    // 일단 문자열의 길이 나누기 m을 해서 몇번을 나눠야할지 알고 그만큼 반복
    let len=my_string.length / m 
    let array=[]
    let num=0;
    for(let i=0; i<len; i++){
        let num2=m*(i+1)
        let str=my_string.slice(num,num2)
        num+=m
        array.push(str)

    }
    for(let j=0; j<array.length; j++){
        answer+=array[j][c-1]
    }
    return answer;
}
  • GPT가 추천해준 문제풀이
function solution(my_string, m, c) {
  let answer = '';
  for (let i = 0; i < my_string.length / m; i++) {
    answer += my_string[i * m + (c - 1)];
  }
  return answer;
}

21. 문자열 여러번 뒤집기

  • 문제설명

  • 문자열 my_string과 이차원 정수 배열 queries가 매개변수로 주어집니다.

  • queries의 원소는 [s, e] 형태로, my_string의 인덱스 s부터 인덱스 e까지를 뒤집으라는 의미입니다.

  • my_string에 queries의 명령을 순서대로 처리한 후의 문자열을 return 하는 solution 함수를 작성해 주세요.

  • 입출력 예

  • my_string queries result
    "rermgorpsam" [[2, 3], [0, 7], [5, 9], [6, 10]] "programmers"
    - 내 문제 풀이
    function solution(my_string, queries) {
        var answer = [...my_string];
        let array=[]
        for(let i=0; i<queries.length; i++){
            const [s,e]=queries[i]
            array=answer.slice(s,e+1).reverse()
           answer.splice(s, e - s + 1, ...array)        
        }
        return answer.join('');
    }
    
    • GPT가 추천해준 문제풀이
    function solution(my_string, queries) {
        const arr = [...my_string];
    
        for (const [s, e] of queries) {
            arr.splice(s, e - s + 1, ...arr.slice(s, e + 1).reverse());
        }
    
        return arr.join('');
    }
    
    • 알아야할 메서드 - splice

    // 원하는 위치에서(start)
    // 원하는 개수(deleteCount) 만큼 요소 삭제하고
    // 그 자리에 새로운 요소들을 넣는다(optional)
    arr.splice(start, deleteCount, ...itemsToInsert)
    
    // 예시
    const arr = [1,2,3,4,5];
    
    arr.splice(1, 2, 9, 9); 
    // 인덱스 1부터 2개 삭제 → [2,3]
    // 그 자리에 9,9 삽입 → arr = [1,9,9,4,5]
    

    20. 수열과 구간 쿼리4

    • 문제설명

    • 정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.

    • 각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 i가 k의 배수이면 arr[i]에 1을 더합니다.

    • 위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.

    • 입출력 예

    • arr queries result
      [0, 1, 2, 4, 3] [[0, 4, 1],[0, 3, 2],[0, 3, 3]] [3, 2, 4, 6, 4]
      - 내 문제 풀이
      function solution(arr, queries) {
          var answer = arr;
          for(let i=0; i<queries.length; i++){
              const [s,e,k]=queries[i]
              for(let j=0; j<arr.length; j++){
                  if(s<=j && j<=e){
                      if(j%k===0){
                          arr[j]=arr[j]+1
                      }
                  }
              }
          }
          return answer;
      }
      
      • GPT가 추천해준 문제풀이
      function solution(arr, queries) {
        for (const [s, e, k] of queries) {
          for (let i = s; i <= e; i += 1) {
            if (i % k === 0) arr[i]++
          }
        }
        return arr
      }
      

      19. 수열과 구간 쿼리3

      • 문제설명

      • 정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [i, j] 꼴입니다.

      • 각 query마다 순서대로 arr[i]의 값과 arr[j]의 값을 서로 바꿉니다.

      • 위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.

      • 입출력 예

      • arr queries result
        [0, 1, 2, 3, 4] [[0, 3],[1, 2],[1, 4]] [3, 4, 1, 0, 2]
        - 내 문제 풀이
        function solution(arr, queries) {
            var answer = arr;
            // queries는 2차원 배열이며
            // [i, j]의 형태임
            // 각 쿼리마다 순서대로 arr[i]랑 arr[j]의 값을 바꾼다
            // i가 0이고 j가 3이면
            // arr[0]번째랑 arr[3]번째를 바꿔서 리턴한다
            const array=[]
            for(let q=0; q<queries.length; q++){
                const [i, j] = queries[q];
                let num= answer[i]
                answer[i]=answer[j]
                answer[j]=num
        
            }
            return answer;
        }
        
        • GPT가 추천해준 문제풀이
        function solution(arr, queries) {
          arr = [...arr]; // 원본 훼손 방지 (선택 사항)
        
          for (const [i, j] of queries) {
            [arr[i], arr[j]] = [arr[j], arr[i]]; // 한 줄 스왑
          }
        
          return arr;
        }
        

        18. 수열과 구간 쿼리2

        • 문제설명

        • 정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.

        • 각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다.

        • 각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요. 단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장합니다.

        • 입출력 예

        • arr queries result
          [0, 1, 2, 4, 3] [[0, 4, 2],[0, 3, 2],[0, 2, 2]] [3, 4, -1]
          - 내 문제 풀이
          function solution(arr, queries) {
            const answer = [];
          
            for (let i = 0; i < queries.length; i++) {
              const [s, e, k] = queries[i];
          
              // 배열의 k 까지가 아닌 e까지만 보기위해 구간 자르기 
              const slice = arr.slice(s, e + 1);
                console.log('slice',slice)
          
              // k보다 큰 값만 필터링
              const filtered = slice.filter((item) => item > k);
                console.log('filtered',filtered)
          
              // k보다 큰 값이 없을때 -1를 
              if (filtered.length === 0) {
                answer.push(-1);
              } else {
                //  k보다 큰 값중 가장 작은 수
                answer.push(Math.min(...filtered));
                  console.log('answer',answer)
              }
            }
          
            return answer;
          }
          
          • GPT가 추천해준 문제풀이
          function solution(arr, queries) {
              return queries.map(([s, e, k]) => arr.slice(s, e + 1).filter((n) => n > k).sort((a, b) => a - b)[0] || -1);
          }
          

          17. 수 조작하기2

          • 문제설명

          • 정수 배열 numLog가 주어집니다. 처음에 numLog[0]에서 부터 시작해 "w", "a", "s", "d"로 이루어진 문자열을 입력으로 받아 순서대로 다음과 같은 조작을 했다고 합시다.

          • "w" : 수에 1을 더한다.

          • "s" : 수에 1을 뺀다.

          • "d" : 수에 10을 더한다.

          • "a" : 수에 10을 뺀다.

          • 제한사항

          • 2 ≤ numLog의 길이 ≤ 100,000

          • 입출력 예

          • numLog result
            [0, 1, 0, 10, 0, 1, 0, 10, 0, -1, -2, -1] "wsdawsdassw"
            - 내 문제 풀이
            function solution(numLog) {
                var answer = [];
            
                // 정수배열 numLog
                // w=+1 
                // s=-1
                // d=+10
                // a=-10
                for(let i=0; i<numLog.length; i++){
                    // numLog[i]의 값이랑 numLog[i]-1의 값이랑 차액을 구해서 그값을 더하면됨
                    // 즉 현재값이랑 이전값의 차이를 보면됨
                    if(numLog[i]-numLog[i-1]===1){
                        answer.push("w")
                    }else if(numLog[i]-numLog[i-1]===-1){
                          answer.push("s")
                    }else if(numLog[i]-numLog[i-1]===10){
                          answer.push("d")
                    }else if(numLog[i]-numLog[i-1]===-10){
                          answer.push("a")
                    }
                }
                return answer.join('');
            }
            
            • GPT가 추천해준 문제풀이
            function solution(numLog) {
              const map = {1: "w", "-1": "s", 10: "d", "-10": "a"};
              return numLog
                .slice(1)
                .map((num, i) => map[num - numLog[i]])
                .join("");
            }
            

            16. 접미사인지 확인하기

            • 문제설명

            • 어떤 문자열에 대해서 접미사는 특정 인덱스부터 시작하는 문자열을 의미합니다. 예를 들어, "banana"의 모든 접미사는 "banana", "anana", "nana", "ana", "na", "a"입니다.
              문자열 my_string과 is_suffix가 주어질 때, is_suffix가 my_string의 접미사라면 1을, 아니면 0을 return 하는 solution 함수를 작성해 주세요.

            • 제한사항

            • my_string과 is_suffix는 영소문자로만 이루어져 있습니다.

            • 입출력 예

            • my_string is_suffix result
              "banana" "ana" 1
              "banana" "nan" 0
            • 내 문제 풀이

            function solution(my_string, is_suffix) {
                var answer = 0;
                // 접두사→ 앞에서부터 일정 부분까지만 남김
                // 접미사 → 뒤쪽에서 시작해서 끝까지 남김
            
                // 즉 my_string의 접미사가 is_suffix 이면 1 아니면 0
            
                for(let i=0; i<my_string.length; i++){
                    let str = my_string.slice(i,my_string.length)
                    if(str === is_suffix){
                        answer = 1 
                        break
                    }
                }
                return answer;
            }
            
            • GPT가 추천해준 문제풀이
            function solution(my_string, is_suffix) {
              return my_string.endsWith(is_suffix) ? 1 : 0;
            }
            
            • 알아야할 메서드 - endsWith

            // 간단히 말하면, 문자열이 특정 문자열로 끝나는지 확인하는 함수
            // searchString → 확인하고 싶은 문자열
            // length (선택) → 문자열을 이 길이까지만 자른 뒤 확인
            
            str.endsWith(searchString[, length])
            
            // 예시
            const str = "banana";
            
            console.log(str.endsWith("ana"));  // true
            console.log(str.endsWith("nana")); // true
            console.log(str.endsWith("ban"));  // false
            console.log(str.endsWith("a"));    // true
            

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

            • 문제설명

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

            • 제한사항

            • included에는 true가 적어도 하나 존재합니다.

            • 입출력 예

            • a d included result
              3 4 [true, false, false, true, true] 37
              7 1 [false, false, false, true, false, false, false] 10
            • 내 문제 풀이

            function solution(a, d, included) {
                var answer = 0;
                var num=0;
                // a는 정수
                // d는 정수이자 공차
                // 등차수열은 숫자가 일정하게 늘어나고 감소되는 수열
                // included[i]가 i+1항을 의미할때 true인 값만 더해서 리턴하는 함수
                for(let i=0; i<included.length; i++){
                    // number은 계속더하고
                    // true일때 nember에 answer를 더하고
                    num === 0 ? num = a : num+=d
                    if(included[i]){
                        answer += num
                    }                
                }
                return answer;
            }
            
            • GPT가 추천해준 문제풀이
            function solution(a, d, included) {
              return included.reduce((sum, flag, i) => sum + (flag ? a + d * i : 0), 0);
            }
            
            • 알아야할 메서드 -reduce

            // 배열을 하나의 값으로 누적시킬 때 쓰는 함수
            
            arr.reduce((누적값, 현재값, 인덱스, 원본배열) => { ... }, 초기값)
            

            14. 특정한 문자를 대문자로 바꾸기

            • 문제설명

            • 영소문자로 이루어진 문자열 my_string과 영소문자 1글자로 이루어진 문자열 alp가 매개변수로 주어질 때, my_string에서 alp에 해당하는 모든 글자를 대문자로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.

            • 제한사항

            • 1 ≤ my_string의 길이 ≤ 1,000

            • 입출력 예

            • my_string alp result
              "programmers" "p" "Programmers"
              "lowercase" "x" "lowercase"
            • 내 문제 풀이

            function solution(my_string, alp) {
                var answer = ''
                for(let i=0; i<my_string.length; i++){
                    if(my_string[i]===alp.toLowerCase()){
                       answer+= alp.toUpperCase()       
                    }else{
                        answer+= my_string[i]
                    }        
                }    
                return answer;
            }
            
            • GPT가 추천해준 문제풀이
            function solution(my_string, alp) {
                return my_string.replaceAll(alp, alp.toUpperCase())
            }
            
            • 알아야할 메서드 - replaceAll()

            // replaceAll() 문자열(String)에서 특정 문자나 문자열을 전부 찾아서 바꾸는 메서드
            // 기본 문법 : 문자열.replaceAll(바꿀대상, 바꾼값)
            
            // 예제
            const str = 'apple and apple';
            const result = str.replaceAll('apple', 'banana');
            console.log(result); // "banana and banana"
            

            13. 글자 이어 붙여 문자열 만들기

            • 문제설명

            • 문자열 my_string과 정수 배열 index_list가 매개변수로 주어집니다. my_string의 index_list의 원소들에 해당하는 인덱스의 글자들을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.

            • 제한사항

            • my_string의 원소는 영소문자로 이루어져 있습니다.

            • 입출력 예

            • my_string index_list result
              "cvsgiorszzzmrpaqpe" [16, 6, 5, 3, 12, 14, 11, 11, 17, 12, 7] "programmers"
              "zpiaz" [1, 2, 0, 0, 3] "pizza"
            • 내 문제 풀이

            function solution(my_string, index_list) {
                var answer = '';
                let string=[...my_string]
            
                for(let i=0; i<index_list.length; i++){
                    answer+=string[index_list[i]]      
                }   
                return answer;
            }
            
            • GPT가 추천해준 문제풀이
            function solution(my_string, index_list) {
                var answer =index_list.map(i => my_string[i]).join('')
            
                return answer;
            }
            

            12. 접두사인지 확인하기

            • 문제설명

            • 어떤 문자열에 대해서 접두사는 특정 인덱스까지의 문자열을 의미합니다. 예를 들어, "banana"의 모든 접두사는 "b", "ba", "ban", "bana", "banan", "banana"입니다.

            • 문자열 my_string과 is_prefix가 주어질 때, is_prefix가 my_string의 접두사라면 1을, 아니면 0을 return 하는 solution 함수를 작성해 주세요.

            • 제한사항

            • my_string과 is_prefix는 영소문자로만 이루어져 있습니다.

            • 입출력 예

            • my_string is_prefix result
              "banana" "ban" 1
              "banana" "nan" 0
            • 내 문제 풀이

            function solution(my_string, is_prefix) {
                var answer = 0;
                // 접두사는 항상 문자열의 맨 앞에서 시작
                // 길이가 길어도 원본보다 길면 접두사가 아님
                //단순히 포함되었다고 접두사가 아님 → 위치가 시작점 0이어야 함
                const length =is_prefix.length
            
                return answer =is_prefix=== my_string.slice(0,length) ? 1 :0;
            }
            

            11. 배열 만들기 2

            • 문제설명

            • 정수 l과 r이 주어졌을 때, l 이상 r이하의 정수 중에서 숫자 "0"과 "5"로만 이루어진 모든 정수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.

            • 만약 그러한 정수가 없다면, -1이 담긴 배열을 return 합니다.

            • 제한사항

            • 1 ≤ l ≤ r ≤ 1,000,000

            • 입출력 예

            • l r result
              5 555 [5, 50, 55, 500, 505, 550, 555]
              10 20 [-1]
            • 내 문제 풀이

            function solution(l, r) {
                var answer = [];
                // l,r은 정수
                // l이상 r이하의 정수 에서 0과 5로 이루어진 정수를 오름차순으로 저장한배열을 리턴
                // dfs(재귀)를 사용하여 문제해결
                function dfs (num){
                    // num이 r보다 크면 리턴
                    if(num > r) return;
                    // num이 l보다 크거나 같고, r보다 작거나 같을때 배열에 num을 push
                    if(num >= l && num <= r ) answer.push(num);
                    // num에 10을 곱해서 다시 함수 실행
                    dfs(num*10);
                    // num에 10 곱하고 +5를 더해서 함수 실행
                    dfs(num*10+5);
            
                }
                // 최초에 함수 실행 num에 5를 넣어줌
                dfs(5);
                // 배열을 오름차순으로 정렬하거나 맞는 값이 없으면 배열에 -1를 넣어서 리턴
                return answer.length > 0 ? answer.sort((a,b)=>a-b):[-1];
            }
            
            • GPT가 추천해준 문제풀이
            // BFS (큐 이용) 버전
            function solution(l, r) {
              const answer = [];
              const queue = [5]; // 5부터 시작
            
              while (queue.length) {
                const num = queue.shift();
            
                if (num > r) continue; // 범위 넘으면 스킵
                if (num >= l) answer.push(num);
            
                // 다음 숫자 생성: 0과 5를 붙임
                queue.push(num * 10);    // 뒤에 0 추가
                queue.push(num * 10 + 5); // 뒤에 5 추가
              }
            
              return answer.length ? answer : [-1];
            }
            

            10. 주사위 게임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 함수를 작성해 주세요.

            • 제한사항
              -a, b, c는 1이상 6이하의 정수입니다.

            • 입출력 예

            • a b c result
              2 6 1 9
            • 내 문제 풀이

            function solution(a, b, c) {
                var answer = 0;
                // a,b,c는 1부터 6까지
                // a,b,c가 모두 다르면 a+b+c 점을 얻고
                // 두개만 같으면 (a + b + c) * (a*a + b*b + c*c)점을 얻음
                // 세개가 같으면 (a + b + c)* (a*a + b*b + c*c) * (a*a*a + b*b*b + c*c*c)점을 얻음
            
                    if(a=== b && a===c){       
                        answer=(a+b+c) * (a*a +b*b +c*c)* (a*a*a +b*b*b +c*c*c)
                    }else if(a=== b || b===c|| a===c){  
                         answer=(a+b+c) * (a*a+b*b+c*c)
                    }else{
                         answer=a+b+c
                    }
                return answer;
            }
            
            • GPT가 추천해준 문제풀이
            function solution(a, b, c) {
              const sum1 = a + b + c
              const sum2 = a**2 + b**2 + c**2
              const sum3 = a**3 + b**3 + c**3
            
              if (a === b && b === c) return sum1 * sum2 * sum3
              if (a === b || b === c || a === c) return sum1 * sum2
              return sum1
            }
            

            11. 수 조작하기1

            • 문제설명

            • 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"로 이루어진 문자열입니다.

            • 입출력 예

            • n control result
              0 "wsdawsdassw" -1
            • 내 문제 풀이

            function solution(n, control) {
              for (let c of control) {
                if (c === 'w') n += 1;
                else if (c === 's') n -= 1;
                else if (c === 'd') n += 10;
                else if (c === 'a') n -= 10;
              }
              return n;
            }
            
            • GPT가 추천해준 문제풀이
            function solution(n, control) {
              const move = { w: 1, s: -1, d: 10, a: -10 };
              for (let c of control) n += move[c];
              return n;
            }
            

            9. 코드 처리하기

            • 문제설명

            • 문자열 code가 주어집니다.

            • code를 앞에서부터 읽으면서 만약 문자가 "1"이면 mode를 바꿉니다. mode에 따라 code를 읽어가면서 문자열 ret을 만들어냅니다.

            • mode는 0과 1이 있으며, idx를 0 부터 code의 길이 - 1 까지 1씩 키워나가면서 code[idx]의 값에 따라 다음과 같이 행동합니다.

            • mode가 0일 때
              code[idx]가 "1"이 아니면 idx가 짝수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.
              code[idx]가 "1"이면 mode를 0에서 1로 바꿉니다.

            • mode가 1일 때
              code[idx]가 "1"이 아니면 idx가 홀수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.
              code[idx]가 "1"이면 mode를 1에서 0으로 바꿉니다.
              문자열 code를 통해 만들어진 문자열 ret를 return 하는 solution 함수를 완성해 주세요.

            • 단, 시작할 때 mode는 0이며, return 하려는 ret가 만약 빈 문자열이라면 대신 "EMPTY"를 return 합니다.

            • 제한사항

              • 1 ≤ code의 길이 ≤ 100,000
              • code는 알파벳 소문자 또는 "1"로 이루어진 문자열입니다.
            • 입출력 예

            • code result
              "abc1abc1abc" "acbac"
            • 내 문제 풀이

            function solution(code) {
                var answer = [...code];
                let mode =0;
                // idx는 0부터 code 길이의 -1까지만 커짐
            
                let ret =[]
            
                // answer 읽으면서 1을 만나면 mode를 바꾼다
                // mode에 따라 answer 읽어가면서 문자열 ret을 만든다
                // mode는 0과1이 있다
                // idx를 0부터 answer 길이 -1까지 1씩 키워가면서 answer[idx]의 값에 따라 다음과 같이 행동한다.
            
                // mode가 0일때
                // 1. answer[idx]가 '1'이 아니면 idx가 짝수 일때만 ret의 맨뒤에 answer[idx]를 추가한다.
                // 2. answer[idx]가 '1'이면 mode를 0에서 1로 바꾼다
            
                // mode가 1일때
                // 1. answer[idx]가 '1'이 아니면 idx가 홀수일때만 ret의 맨뒤에 answer[idx]를 추가한다.
                // 2. answer[idx]가 '1'이면 mode를 1에서 0으로 바꾼다
            
                for(let i=0; i<answer.length; i++){
                   // mode가 0일때
                    if(mode===0){
                        answer[i] !== '1' ?   i % 2 ===0 && ret.push(answer[i]) : mode=1  
                    }
                    // mode가 1일때
                    else if(mode ===1){
                        answer[i] !== '1' ?  i % 2 ===1 &&  ret.push(answer[i]) : mode=0
                    }  
            
                }
            return ret.length ? ret.join('') : 'EMPTY'
            }
            
            • GPT가 추천해준 문제풀이
            function solution(code) {
              let mode = 0
              const ret = []
            
              for (let i = 0; i < code.length; i++) {
                if (code[i] === '1') mode ^= 1 // 0↔1 토글
                else if (i % 2 === mode) ret.push(code[i])
              }
            
              return ret.length ? ret.join('') : 'EMPTY'
            }
            

            8. 홀짝에 따라 다른 값 반환하기

            • 문제설명

              • 양의 정수 n이 매개변수로 주어질 때, n이 홀수라면 n 이하의 홀수인 모든 양의 정수의 합을 return 하고 n이 짝수라면 n 이하의 짝수인 모든 양의 정수의 제곱의 합을 return 하는 solution 함수를 작성해 주세요.
            • 제한사항

              • 1 ≤ n ≤ 100
            • 입출력 예

            • n result
              7 16
              10 220
            • 내 문제 풀이

            function solution(n) {
                var answer = 0;
                // 홀수 일때
                if(n % 2===1){
                // i를 1부터 2씩 증가시키고 answer은 1 부터 i가 n과 같을때까지 더해짐
                    for(let i =1; i<=n; i+=2){
                        answer +=i            
                    }
                //짝수일때
                }else{
                // i를 2부터 2씩 증가시키고 answer은 0부터 i를 더한값의 제곱이 n과 같을때까지 반복
                  for(let i =2; i<=n; i+=2){
                    answer +=i *i       
                    }
                }
                return answer;
            }
            
            • GPT가 추천해준 문제풀이
            function solution(n) {
              return n % 2
                ? ((n + 1) / 2) ** 2
                : (n * (n + 2) * (2 * n + 1)) / 12;
            }
            

            7. 마지막 두 원소

            • 문제설명
              • 정수 리스트 num_list가 주어질 때, 마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을 마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두 배한 값을 추가하여 return하도록 solution 함수를 완성해주세요.
            • 제한사항
              • 2 ≤ num_list의 길이 ≤ 10
                1 ≤ num_list의 원소 ≤ 9
            • 입출력 예
            • num_list result
              [2, 1, 6] [2, 1, 6, 5]
              [5, 2, 1, 7, 5] [5, 2, 1, 7, 5, 10]
            • 내 문제 풀이
            function solution(num_list) {
                var answer = [];
                // 정수리스트 num_list
                // 마지막 원소가 그 전 원소보다 크면
                // 마지막 원소에서 그 전 원소를 뺀값을
                // 마지막 원소가 그 전 원소보다 안크면
                // 마지막 웝소를 두배한 값을 추가하여 리턴
             function solution(num_list) {
                var answer = [];
                const length=num_list.length
                // 리스트 마지막 값이 그 전 값보다 크면 
                // 마지막 값에서 그 전 원소를 뺀값을
                // 아니면 마지막값을 x2한 값을 리턴
                let num=num_list[length-2] < num_list[length-1] ? num_list[length-1] - num_list[length-2] : num_list[length-1] * 2
            
               return answer=[...num_list,num]
            }
            
            • GPT가 추천해준 문제풀이
            function solution(num_list) {
              const [a, b] = num_list.slice(-2); // 마지막 두 원소
              const num = b > a ? b - a : b * 2; // 조건 계산
              return [...num_list, num]; // 결과 배열 반환
            }
            

            6. 더 크게 합치기

            • 문제설명
              • 연산 ⊕는 두 정수에 대한 연산으로 두 정수를 붙여서 쓴 값을 반환합니다. 예를 들면 다음과 같습니다.
              • 12 ⊕ 3 = 123
              • 3 ⊕ 12 = 312
              • 양의 정수 a와 b가 주어졌을 때, a ⊕ b와 b ⊕ a 중 더 큰 값을 return 하는 solution 함수를 완성해 주세요.
              • 단, a ⊕ b와 b ⊕ a가 같다면 a ⊕ b를 return 합니다.주세요.
            • 제한사항
              • 1 ≤ a, b < 10,000
            • 입출력 예
            • a b result
              9 91 991
              89 9 898
            • 내 문제 풀이
            function solution(a, b) {
                var answer = 0;
                let one =String(a) + String(b)
                let two =String(b) + String(a)
                if(one<two){
                    answer=Number(two)
                }else{
                    answer=Number(one)
                }
            
                return answer;
            }
            
            • GPT가 추천해준 문제풀이
            function solution(a, b) {
              return Math.max(Number(`${a}${b}`), Number(`${b}${a}`));
            }
            

            5. 대소문자 바꿔서 출력하기

            • 문제설명
              • 길이가 같은 두 문자열 str1과 str2가 주어집니다.
              • 두 문자열의 각 문자가 앞에서부터 서로 번갈아가면서 한 번씩 등장하는 문자열을 만들어 return 하는 solution 함수를 완성해 주세요.
            • 제한사항
              • 1 ≤ str1의 길이 = str2의 길이 ≤ 10
              • str1과 str2는 알파벳 소문자로 이루어진 문자열입니다.
            • 입출력 예
              • str1 | str2 | result
              • aaaaa | bbbbb | ababababab
            • 내 문제 풀이
            function solution(str1, str2) {
                var answer = '';
                // 빈배열을 만든다
                let arr=[]
                //두개의 배열의 길이만큼 반복문을 돌린다
                for(let i=0; i<str1.length + str2.length; i++){  
                   // 하나의 배열의 길이반큼 배열에 push한다
                    if(i<str1.length){
                        arr.push(str1[i])
                        arr.push(str2[i])
                    }
                }
                answer=arr.join('')
            
                return answer;
            }
            
            • GPT가 추천해준 문제풀이
            // 내 코드 보완
            function solution(str1, str2) {
              let answer = '';
              for (let i = 0; i < str1.length; i++) {
                answer += str1[i] + str2[i];
              }
              return answer;
            }
            
            // 한줄로
            const solution = (str1, str2) => [...str1].map((c, i) => c + str2[i]).join('');
            

            4. 대소문자 바꿔서 출력하기

            • 문제설명
              • 영어 알파벳으로 이루어진 문자열 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;
                // 소문자를 대문자로
                // 대문자를 소문자로
            
                let arr=[]
                // 배열을 풀고
                // 배열을 푼거랑 내가 소문자로 만든 배열이랑 비교해서 
                // 만약 둘다 소문자면 대문자로 바꿔   
                for(let i=0; i<input.length; i++){   
                    let a = input[i]
                    let b=input[i]
            
                    if(a===b.toLowerCase()){         
                       arr.push(a.toUpperCase())
                     }else{
                     arr.push(a.toLowerCase())
                     }
                }
                console.log(arr.join('')) 
            });
            
            • GPT가 추천해준 문제풀이
            const readline = require('readline');
            const rl = readline.createInterface({
                input: process.stdin,
                output: process.stdout
            });
            
            rl.on('line', line => {
                // split + map으로 바로 변환
                const result = line
                    .split('')
                    .map(c => c === c.toLowerCase() ? c.toUpperCase() : c.toLowerCase())
                    .join('');
                console.log(result);
                rl.close();
            });
            

            3. 문자열 겹쳐쓰

            • 문제설명
              • 문자열 my_string, overwrite_string과 정수 s가 주어집니다. 문자열 my_string의 인덱스 s부터 overwrite_string의 길이만큼을 문자열 overwrite_string으로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.
            • 제한사항
              • my_string와 overwrite_string은 숫자와 알파벳으로 이루어져 있습니다.
              • 1 ≤ overwrite_string의 길이 ≤ my_string의 길이 ≤ 1,000
              • 0 ≤ s ≤ my_string의 길이 - overwrite_string의 길이
            • 입출력 예
              • my_string | overwrite_string | s | result
              • "He11oWor1d" | "lloWorl" | 2 | "HelloWorld"
              • "Program29b8UYP" | "merS123" | 7 | "ProgrammerS123"
            • 내 문제 풀이
            function solution(my_string, overwrite_string, s) {
                var answer = '';
              answer=my_string.slice(0,s)+overwrite_string+my_string.slice(s+overwrite_string.length);
            
                return answer;
            }
            
            • GPT가 추천해준 문제풀이
            function solution(my_string, overwrite_string, s) {
                let arr = my_string.split(''); // 문자열 → 배열
                for (let i = 0; i < overwrite_string.length; i++) {
                    arr[s + i] = overwrite_string[i]; // 덮어쓰기
                }
                return arr.join(''); // 배열 → 문자열
            }
            

            2. 원소들의 곱과 합

            • 문제설명
              • 정수가 담긴 리스트 num_list가 주어질 때, 모든 원소들의 곱이 모든 원소들의 합의 제곱보다 작으면 1을 크면 0을 return하도록 solution 함수를 완성해주세요.
            • 제한사항
              • 2 ≤ num_list의 길이 ≤ 10
              • 1 ≤ num_list의 원소 ≤ 9
            • 입출력 예
              • num_list | result
              • [3, 4, 5, 2, 1] | 1
              • [5, 7, 8, 3] | 0
            • 내 문제 풀이
            function solution(num_list) {
                var answer = 0;
                let num =1;
                let num2 = 0;
                // num이 num2의 제곱보다 작으면 1 아니면 0
                for(let i=0; i<num_list.length; i++){
                    num *=num_list[i];
                    num2 +=num_list[i];
            
                }
                return answer = num<num2*num2 ? 1 : 0;
            }
            
            • GPT가 추천해준 문제풀이
            // 반복문(for) 대신 자바스크립트 배열 메서드(reduce)를 사용하면
            
            function solution(num_list) {
              const sum = num_list.reduce((a, b) => a + b, 0);
              const mul = num_list.reduce((a, b) => a * b, 1);
              return mul < sum ** 2 ? 1 : 0;
            }
            

            1. 문자열 곱하기

            • 문제설명
              • 문자열 my_string과 정수 k가 주어질 때, my_string을 k번 반복한 문자열을 return 하는 solution 함수를 작성해 주세요.
            • 제한사항
              • 1 ≤ my_string의 길이 ≤ 100
              • my_string은 영소문자로만 이루어져 있습니다.
              • 1 ≤ k ≤ 100
            • 입출력 예
              • my_string k result
              • "string" 3 "stringstringstring"
              • "love" 10 "lovelovelovelovelovelovelovelovelovelove"
            • 내 문제 풀이
            function solution(my_string, k) {
                var answer = '';
                for(let i=0; i < k; i++){
                    answer=answer+my_string
                }
            
                return answer;
            }
            
            console.log(solution('string',3))
            console.log(solution('love',10))
            
            • GPT가 추천해준 문제풀이
            function solution(my_string, k) {
              return my_string.repeat(k);
            }
            

댓글

Top