📘 오늘의 공부
- 알고리즘
문제 : 자연수 뒤집어 배열로 만들기
<문제 설명>
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
<제한 조건>
n은 10,000,000,000이하인 자연수입니다.
내 풀이 (실패) - sort로 내림차순한 부분을 reverse()로 바꾸니 성공함
function solution(n) { //ex. n===123
let stringN = String(n); // n ==== '123' (문자열로 바꿔서 쪼갤거야)
Arr = stringN.split(''); // ['1','2','3'];
let reverseN = Arr.sort((a, b) => b - a); // ['3','2','1']
let turnNumber = function(arg) { // 매개변수를 숫자로 만드는 함수
return Number(arg);}
return reverseN.map(turnNumber); //배열 돌아서 숫자로 만들어줘
}
function solution(n) {
let stringN = String(n);
Arr = stringN.split('');
let reverseN = Arr.reverse()
let turnNumber = function(arg) {
return Number(arg);}
return reverseN.map(turnNumber);
}
split()
map()
reverse()
문제 : 정수 제곱근 판별
<문제 설명>
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
<제한 사항>
n은 1이상, 50000000000000 이하인 양의 정수입니다.
시도 (-1 출력 성공, (x+1)^2 출력 실패)
// 루트 씌워서 실수이면 false, 정수이면 true 로직으로 접근
function solution(n) {
let x = Math.sqrt(n);
let remove_float = Math.floor(x);
if (x === remove_float) {
return (x + 1) ^ 2;
} else { return -1; }
}
function solution(n) {
let x = Math.sqrt(n);
let remove_float = Math.floor(x);
if (x === remove_float) {
return Math.pow(x + 1, 2);
} else { return -1; }
}
Math.sqrt()
: 숫자의 제곱근 반환(루트 씌운값 반환)제곱근
: n = x^2 인 경우에서 x가 제곱근Math.pow(base, exponent)
: 제곱한 값 반환문제 : 문자열 내 p와 y의 개수
<문제 설명>
대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.
(예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.)
<제한사항>
문자열 s의 길이 : 50 이하의 자연수
문자열 s는 알파벳으로만 이루어져 있습니다.
시도 : 문자열 s를 전부 쪼개고 p,P 개수와 y,Y 개수 따로 구해보려함 (실패)
function solution(s) {
let split_s = s.split(""); // ['s', 'p', ...]
// 's'의 개수
for (let i = 0; i < split_s.length; i++) {
if (split_s[i] === "s" || split_s[i] === "S") {
i = i+1;
} console.log(i);
}
}
function solution(s) {
let check_p = s.toLowerCase().split('p').length;
let check_y = s.toLowerCase().split('y').length;
return check_p === check_y;
}
문자열.toLowerCase()
: 전부다 소문자로 바꿔줌문자열.toUpperCase()
: 전부다 대문자로 바꿔줌문자열.match('문자')
: 문자열 안에 특정 문자가 있는지 확인 가능문제 : 음양 더하기
<문제 설명>
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
<제한사항>
absolutes의 길이는 1 이상 1,000 이하입니다.
absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
signs의 길이는 absolutes의 길이와 같습니다.
signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.
풀이 : 처음으로 아무런 외부 도움없이 혼자 힘으로 풀었다! 뿌듯!!
function solution(absolutes, signs) {
let answer = 0;
for (let i=0; i < absolutes.length; i++) {
if (signs[i] === true) {
absolutes[i] = Number(absolutes[i]);
} else if (signs[i] === false) {
absolutes[i] = -Number(absolutes[i]);
} answer = answer + absolutes[i];
} return answer;
}
function solution(absolutes, signs) {
let answer = 0;
for (let i = 0; i < absolutes.length; i++) {
signs[i] ? answer += absolutes[i] : answer -= absolutes[i]
}
return answer;
}