JavaScript 223

LV1 11 수박수박수박수박수박수?

문제 설명 - 길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다. 제한 조건 n은 길이 10,000이하인 자연수입니다. 입출력 예 n return 3 "수박수" 4 "수박수박" 나만의 풀이 고민을 했다. 우선 쉽게 생각나는 것은 문자열로 수박과 빈 배열을 선언하고 반복문, 조건문, join을 이용하는 것인데, 런타임도 길고 비효율 적이다 라고 생각이 되서 그렇다. 문뜩 문자열을 반복해서 찍어주는 메서드가 있을 것 같아 찾아보니 repeat()가 나왔다. 첫 인자로 주어진 숫자형 만큼 반복해서 찍고 문자열로 반환하는 것이였다. 그래서 n / 2하고 올림을 ..

LV1 10 가운데 글자 가져오기

문제 설명 - 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다. 제한사항 s는 길이가 1 이상, 100이하인 스트링입니다. 입출력 예 s return "abcde" "c" "qwer" "we" 나만의 풀이 - 우선 문자열의 내장 함수인 substr을 이용해 글자를 자라야 겠다고 생각했다. 그렇다면 index 위치를 정해야 하는데 중간 index와 중간에 2개가 있으면 앞의 index를 가져오는 방법으로 length / 2를 한 후 올림을 하고 -1히면 된다. 그렇게 index 위치를 정하고 2번째 인자로 삼항연사자를 이용해 문자열이 짝수면 2개, 홀수면 1개를 반환하개 하면 된다. function solution(s) { ..

20-4 배열과 메서드 4 (reduce, rediceRight, Array.isArray, 'thisArg')

reduce()와 reduceRight() - 반목문 처럼 두 메서드들도 유사한 작업을 수행 해준다. 그런데 사용법이 조금 복잡하다. reduce와 reduceRight는 배열을 기반으로 값 하나를 도출할 때 사용한다. arr.reduce((accumulator, item, index, array)[, initial]); accumulator – 이전 함수 호출의 결과. initial은 함수 최초 호출 시 사용되는 초깃값을 나타냄(옵션) item – 현재 배열 요소 index – 요소의 위치 array – 배열 첫 번째 인수는 앞서 호출했던 함수들의 결과가 누적되어 저장되는 '누산기(accumulator)'라고 생각하면 된다. 마지막 함수까지 호출되면 이 값은 reduce의 반환 값이 된다. 예) let..

JS 2022.12.13

LV1 09 없는 숫자 더하기

문제 설명 - 0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 1 ≤ numbers의 길이 ≤ 9 0 ≤ numbers의 모든 원소 ≤ 9 numbers의 모든 원소는 서로 다릅니다. 입출력 예 numbers result [1,2,3,4,6,7,8,0] 14 [5,8,4,0,6,7,9] 6 나만의 풀이 처음에는 코드적으로 풀려고 0-9까지 있는 배열을 만들고 겹치는 숫자를 제거하는 식으로 하려고 했는데, 문뜩 생각이 났다. 0-9까지 더하면 45가 나오고 배열 안의 수를 다 더한 후 빼면 된다는 생각을 했다!! 그래서 쉽..

LV1 08 음양 더하기

문제 설명 - 어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요. 제한사항 absolutes의 길이는 1 이상 1,000 이하입니다. absolutes의 모든 수는 각각 1 이상 1,000 이하입니다. signs의 길이는 absolutes의 길이와 같습니다. signs[i]가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다. 입출력 예 absolutes signs result [4,7,12] [true,false,true] 9 [1,2,3] [false,fal..

LV1 07 제일 작은 수 제거하기

문제 설명 - 정수를 저장한 배열, arr에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를 들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴하고, [10]면 [-1]을 리턴합니다. 제한 조건 arr은 길이 1 이상인 배열입니다. 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다. 입출력 예 arr return [4, 3, 2, 1] [4, 3, 2] [10] [-1] 나만의 풀이 - splice() 메서드로 배열 안에 있는 요소를 삭제할 수 있다. 그런데 삭제하기 위해서는 해당 요소의 index가 필요해 indexOf와 Math.min을 이용해 가장 작은 수..

20-3 배열과 메서드 3 (map, sort, reverse, split, join)

- 지금부터 알아볼 메서드는 배열을 변형하는 기능이 있다. map() - 유용성과 사용 빈도가 아주 높은 메서드 중 하나다. 배열 요소 전체를 대상으로 함수를 호출하고, 결과를 배열로 반환한다. arr.map(callback(currentValue[, index[, array]])[, thisArg]) callback - 새로운 배열 요소를 생성하는 함수. 다음 세 가지 인수를 가집니다. currentValue - 처리할 현재 요소. index - 처리할 현재 요소의 인덱스. array - map()을 호출한 배열. thisArg - callback을 실행할 때 this로 사용되는 값. 예) let arr = [1, 2, 3, 4, 5, 6]; arr.map(e => e * 2); // [2, 4, 6,..

JS 2022.12.12

LV1 06 핸드폰 번호 가리기, 나누어 떨어지는 숫자 배열

핸드폰 번호 가리기 문제: phone_number로 전화번호가 주어 졌을 때 뒷 4자리를 제외한 나머지 숫자를 *로 표시하기 풀이: 문자열을 배열화 한 후 반복문과 삼항연산자를 이용해 뒤의 4자리만 남기고 '*'로 바꾼 후 join('') 했다. 정규표현식으로도 풀 수 있을 것 같다는 생각도 했다. (이건 혼자 해볼 생각임.) function solution(phone_number) { return phone_number.split('').map((e, i) => i < phone_number.length - 4 ? e = '*' : e).join(''); } 나누어 떨어지는 숫자 배열 문제: arr배열 각 element 중 숫자형 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하고..

LV1 05 두 정수 사이의 합, 콜라츠 추측, 서울에서 김서방 찾기

두 정수 사이의 합 문제: 두 정수 a, b 사이에 속한 모든 전수의 합을 구하면 된다. 풀이: 수학적 규칙을 이용해 풀었다. (두 수의 합) * (두 수의 차 + 1) / 2를 하면 a~b의 합을 구할 수 있다. function solution(a, b) { return (a + b) * (Math.abs(a - b) + 1) / 2; } 콜라츠 추측 문제: Collatz란 사람에 의해 제기된 이 추측으로 입력된 수가 짝수면 / 2, 홀수면 * 3 + 1을 반복하면 주어진 수가 1이 된다는 것이다. 여기서 1이 되기까지 몇번을 반복하는 return하라. 단, 주어진 숫자가 1이면 0을, 500번 초과 반복해야 된다면 -1을 return하라. 풀이: 먼저 조건문을 이용해 1일 경우 0을 리턴하고 for문..

20-2 배열과 메서드 2 (forEach, indexOF, lastIndexOf, includes, find, findIndex, filter)

forEach - 주어진 함수를 배열 요소 각각에 대해 실행할 수 있게 한다. 문법: arr.forEach(callback(currentvalue[, index[, array]])[, thisArg]) 예 ["Bilbo", "Gandalf", "Nazgul"].forEach((item, index, array) => { alert(`${item} is at index ${index} in ${array}`); }); // Bilbo is at index 0 in Bilbo,Gandalf,Nazgul // Gandalf is at index 1 in Bilbo,Gandalf,Nazgul // Nazgul is at index 2 in Bilbo,Gandalf,Nazgul 배열 탐색하기 indexOf, la..

JS 2022.12.08