오늘의 알고리즘 👍
📝 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);
}
출처: 프로그래머스
출처: 코드캠프