오늘의 알고리즘 👍
📝 1. 문자열 내 p와 y의 개수
- 대문자와 소문자가 섞여있는 문자열 s가 주어집니다. 
 
- s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 
 
- 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 
 
- 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다. 
 
- 예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.
 
▷ 내 풀이
function solution(s) {
  let pNum = 0;
  let yNum = 0;
  for (let i = 0; i < s.length; i++) {
    if (s[i] === "p" || s[i] === "P") {
      pNum++;
    } else if (s[i] === "y" || s[i] === "Y") {
      yNum++;
    }
  }
  if (yNum === pNum) {
    return true;
  } else {
    return false;
  }
}
▷ 매서드 사용 풀이
function solution(s) {
    s = s.toLowerCase(); 
    const obj = {p : 0, y : 0}
    
    
    s.split("").forEach(str => {
        obj[str] === undefined ? obj[str] = 1 : obj[s[i]]++
    })
    
    
    
    
    return obj.p === obj.y
}
📝 2. 이상한 문자 만들기
- 문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 
 
- 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 
 
- 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
 
▷ 내 풀이
▷ 해결 못함 ❌
function solution(s) {
    let answer = '';
    for(let i = 0; i < s.length; i++){
        if (s[i] === " " ) {
          answer = answer + " "
        } else if (i % 2 === 0 || s[i - 1] === " "){
             answer = answer + s.toUpperCase()[i]
        } else if (i % 2 !== 0 && s[i - 2] !== " ") {
             answer = answer + s.toLowerCase()[i]
        }
  }
  return answer;
  }
▷ 수업 풀이
function solution(s) {
  let answer = "";
  let idx = 0;
  for (let i = 0; i < s.length; i++) {
    if (s[i] === " ") {
      
      answer += " ";
      idx = 0;
    } else {
      answer += idx % 2 === 0 ? s[i].toUpperCase() : s[i].toLowerCase();
      idx++;
    }
  }
  return answer;
}
▷ split, map, join 매서드 사용 풀이
function solution(s) {
  const answer = s
    .split(" ")
    .map((word) => {
      return word
        .split("")
        .map((letter, i) => {
          return i % 2 === 0 ? letter.toUpperCase() : letter.toLowerCase();
        })
        .join("");
    })
    .join(" ");
  return answer;
}
📝 3. 자연수 뒤집어 배열로 만들기
- 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 
 
- 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
 
▷ 내 풀이
▷ 해결 못함 ❌
▷ 수업 코드
function solution(n) {
  n = n.toString();
  const answer = [];
  for (let i = n.length - 1; i >= 0; i--) {
    answer.push(Number(n[i]));
  }
  return answer;
}
▷ 매서드 사용 풀이
function solution(n) {
  const answer = n
    .toString()
    .split("")
    .reverse()
    .map((num) => {
      return Number(num);
    });
  return answer;
}
4. 나누어 떨어지는 숫자 배열
- array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
 
- divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.
 
▷ 내 풀이
▷ 해결 못함 ❌
▷ 수업 코드
function solution(arr, divisor) {
  const answer = [];
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] % divisor === 0) {
      answer.push(arr[i]);
    }
  }
  return answer.length === 0 ? [-1] : answer.sort((a, b) => a - b);
}
▷ 매서드 사용 풀이
function solution(arr, divisor) {
  const answer = arr.filter(number => {
    return number % divisor === 0
  })
  return answer.length === 0 ? [-1] : answer.sort((a, b) => a - b);
}
출처: 프로그래머스
출처: 코드캠프