<문제1 : 없는 숫자 더하기>
0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ numbers의 길이 ≤ 9
입출력 예
numbers | result |
[1,2,3,4,6,7,8,0] | 14 |
[5,8,4,0,6,7,9] | 6 |
입출력 예 설명
입출력 예 #1
- 5, 9가 numbers에 없으므로, 5 + 9 = 14를 return 해야 합니다.
입출력 예 #2
- 1, 2, 3이 numbers에 없으므로, 1 + 2 + 3 = 6을 return 해야 합니다.
- 내가 푼 풀이
function solution(numbers) {
var answer = 0;
for(let i=0; i<10; i++){
if(!numbers.includes(i)){
answer += i
}
}
return answer;
}
for문을 이용해 1~9 사이의 i값을 포함하지 않을 경우 더해주었다.
- includes() : 특정 요소가 포함하는지 확인하는 함수로, 요소가 포함되어있으면 'true', 아니면 'false'를 반환
- 다른 풀이
function solution(numbers) {
return 45 - numbers.reduce((cur, acc) => cur + acc, 0);
}
내가 처음으로 생각했던 풀이 방법. 0~9라는 작은 범위라서 구현해볼까하다가 범위가 커질경우를 대비해 위 방법으로 풀이를 진행하였다.
<문제2 : 제일 작은 수 제거하기>
정수를 저장한 배열, 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] |
- 내가 푼 풀이
function solution(arr) {
var answer = [];
arr.splice(arr.indexOf(Math.min(...arr)),1);
arr.length < 1 ? answer= [-1] : answer = arr;
return answer;
}
Math.min()을 이용해서 배열에서 가장 작은 값을 찾는다.
arr.indexOf()를 통해 배열에서 가장 작은 값의 위치를 찾는다
arr.splice()를 통해 찾은 가장 작은 값의 위치의 요소 1개를 제거한다
arr의 길이를 통해 -1을 반환할지 제일 작은 수를 제거한 arr를 반환할지 결정한다
- array.splice(start, deleteCount, item1, item2, ..., itemN) : 배열의 내용을 추가, 제거 또는 교체할 때 사용하는 메서드
start : 배열 변경 시작할 인덱스 / deleteCount : 제거할 요소 개수 / item1, item2, ..., itemN : 배열에 추가할 요소 - indexOf(searchValue, fromIndex) :배열 또는 문자열 내에서 특정 요소나 문자의 첫 번째 발생 위치를 반환하는 메서드
searchValue : 검색할 문자, fromIndex : 검색을 시작할 인덱스. 기본값 '0' - Math.min() :주어진 숫자 중에서 가장 작은 값을 반환하는 함수
- ...arr : 스프레드 연산자로 배열이나 이터러블 객체의 모든 요소를 개별적인 인수로 분리합니다.
즉, 배열 arr의 요소를 하나씩 Math.min 함수에 전달하는 역할
- 다른 풀이
function solution(arr) {
const min = Math.min(...arr);
return arr.length !== 1 ? arr.filter(i => i !== min) : [-1]
}
내 풀이와 동일하게 가장 작은 값을 구해 정의해준다.
arr의 길이가 1개가 아닐 경우, 최소값과 일치하지 않는 값만 모아 새로운 배열로 반환한다.
- Array.prototype.filter() : 배열의 각 요소를 테스트하여 조건을 만족하는 요소들만 모아 새로운 배열로 반환
<문제3 : 가운데 글자 가져오기>
단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
제한 사항
- s는 길이가 1 이상, 100이하인 스트링입니다.
입출력 예
s | return |
"abcde" | "c" |
"qwer" | "we" |
- 내가 푼 풀이
function solution(s) {
var answer = '';
let len = s.length;
let cen = Math.floor(len/2)
if(len % 2 == 0){
answer = s.slice(cen-1, cen+1)
} else {
answer = s.slice(cen, cen+1);
}
return answer;
}
s의 길이를 len으로 정의내린 후 이걸 반으로 나눈 값을 정수로 추출해 s의 중간 부근을 가리킬 수 있는 상태로 만들어줌
len이 짝수일 경우 cen이 가리키는 인덱스가 추출해야 하는 값보다 1 크기 때문에 -1을 한 후 그 다음 인덱스 값까지 빼준다.
len이 홀수일 경우 cen이 딱 중앙값을 가리키기 때문에 그 값 하나만 빼준다.
- Math.floor() : 주어진 숫자보다 크지 않은 가장 큰 정수를 반환하는 함수
- array.slice([begin[, end]]) : 배열의 일부를 추출하여 새로운 배열로 반환하는 데 사용
begin : 추출 시작점의 인덱스 / end : 추출 종료점의 인덱스 (해당 인덱스의 요소는 포함되지 않음
- 다른 풀이
function solution(s) {
return s.substr(Math.ceil(s.length / 2) - 1, s.length % 2 === 0 ? 2 : 1);
}
- 다른 풀이
function solution(s) {
const mid = Math.floor(s.length/2);
return s.length %2 === 1 ? s[mid] : s[mid-1]+s[mid];
}
'개발 기초 다지기' 카테고리의 다른 글
내일배움캠프 26일차 : 데이터베이스 정규화 (0) | 2024.05.22 |
---|---|
내일배움캠프 25일차 : Node.js 활용 CS 개념 (1) | 2024.05.21 |
내일배움캠프 23일차 : VS Code Node.js 프로젝트 초기 세팅 (0) | 2024.05.17 |
내일배움캠프 22일차 : Node.js CRUD 구현하기 (0) | 2024.05.16 |
내일배움캠프 21일차 : AWS 및 git ssh key오류 (port22 : Operation timed out) (0) | 2024.05.15 |
댓글