
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")); // true15. 등차수열의 특정한 항만 더하기
문제설명
두 정수 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,0001 ≤ 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
- 2 ≤ num_list의 길이 ≤ 10
- 입출력 예
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); }