[20230220_프로그래머스 알고리즘_Lv.1]

YunTrollpark·2023년 2월 20일
0

1. 내적

문제 설명

길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.

제한 사항
• a, b의 길이는 1 이상 1,000 이하입니다.
• a, b의 모든 수는 -1,000 이상 1,000 이하입니다.

function solution(a, b) {
const array = [...a,...b]
let newArray = []
const length = array.length / 2
for(i=0; i < length; i++){
newArray.push(array[i]*array[length+i])
}

  return newArray.reduce((a,b)=>a+b)
}

// 해설
// 1. array라는 배열에 스프레드 함수로 a, b 배열을 합해줌
// 2. 빈 배열 선언
// 3. 새로 만든 배열의 길이에 나누기 2 
// 4. for문을 돌아서 새로 생성한 배열에 i번째 곱하기 새로 생성한 배열에[배열길이 + i]
// 5. 곱한 값을 빈배열에 push
// 6. newArray 모든 수를 더해준 값을 return
  • reduce 함수로 다른 사람들은 더 간단하게 풀어서... reduce 함수 추가로 공부하긔...

2. 문자열 내림차순으로 배치하기

문제 설명

문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.

제한 조건
• str은 길이 1 이상인 문자열입니다.

function solution(s) {
const upper = [...s]
const small = [...s]
const array = []
array.push(...small.filter((item)=> item === item.toLowerCase()).sort().reverse())
array.push(...upper.filter((item)=> item === item.toUpperCase()).sort().reverse())
return array.join('')
}

// 해설
// 1. 대문자 소문자 필터 함수를 사용하기 위해 문자열을 분해한 배열 선언
// 2. 빈배열 선언
// 3. 각각의 배열을 sort로 정렬후 reverse로 뒤집어줌(그러면 문자열이 오름차순에서 정렬됐다가 내림차순으로 정렬됨)
// 4. 그리고 소문자 먼저 빈배열에 push, 그 다음 대문자를 빈배열에 push
// 5. 그렇게 생성 된 배열을 join('')합쳐줌
// 궁금해서 가져온 다른 사람 풀이
// sort가 대문자 소문자도 정렬 해주는지 몰랐당...
function solution(s) {
  return s
    .split("")
    .sort()
    .reverse()
    .join("");
}

3. 약수의 개수와 덧셈

문제 설명

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

제한 조건
• 1 ≤ left ≤ right ≤ 1,000

function solution(left, right) {
const array = [left, right]
let newArray = []

for(i=1;i<right-left;i++){
  array.push(left+i)  
}

for (i=0; i<array.length; i++){
if( Number.isInteger(Math.sqrt(array[i]))  === false){
newArray.push(array[i])
} else {newArray.push(-array[i])}
}
return newArray.reduce((a,b) => a+b)
}

// 해설
// 제곱근을 했을 때 나머지가 나오면 약수의 개수가 홀수고 나머지가 있으면 약수의 개수가 짝수임!
// 1. 배열에  받은 수를 먼저 넣어줌
// 2. 빈배열 선언
// 3. for 문을 활용해서 right - left 빼서 나온 수만큼 반복해주고, left에 +i를 다시 배열에 push
// 4. 여기가 중요한데 제곱근 해서 나머지가 없으면 약수의 개수가 홀수! 나머지가 있으면 약수의 개수가 짝수! 그래서 다시 생성한 배열의 길이만큼 반복해서 약수의 개수가 홀수면 -붙여서 빈배열에 push 짝수면 그냥 push
// 5. 마지막에 배열에 있는 모든 수 합산해서 return 

오늘은 맨마지막 문제만 힌트 좀 찾아 봤다.
계속 루트로 뭔가 할 수 있을 것 같아서 찾아보다가 제곱근 씌워서 나머지로 약수의 개수 짝, 홀 판별 가능하다는 사실을 알게 돼서 겨우 풀었다... 2시간 동안 품 ㅎ.....
그래도 해냈돠... 이제 가면 갈수록 난도가 어려워진다 흑흑 그래고 파이팅이다!

profile
코딩으로 세상에 이야기하는 개발자

0개의 댓글