230323_Algorithm

majungha·2023년 4월 27일
1

알고리즘

목록 보기
8/71

오늘의 알고리즘 👍

📝 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}
    // let p = 0;
    // let y = 0;
    s.split("").forEach(str => {
        obj[str] === undefined ? obj[str] = 1 : obj[s[i]]++
    })
    // for (let i = 0; i < s.length; i++) {
    //     // obj[s[i]] === undefined
    //     obj[s[i]] === undefined ? obj[s[i]] = 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);
}

출처: 프로그래머스
출처: 코드캠프

profile
개발자 블로그 / 항상 겸손한 자세로 배우면서 성장하자 할 수 있다!

0개의 댓글