
이번 알고리즘 코드카타는 일단 문제부터 이해가 안 가서 문제만 5분 넘게 읽은 것 같다 😥 간신히 이해하고 밍기적 밍기적 한 줄씩 써가다.. 얼떨결에 완성..! 을 했는데???????
vscode에서 작업했을 땐 멀쩡히 잘 찍히는 값들이 프로그래머스로 옮겨서 실행하면undefined가 뜨는 거다☠️
계속 눈만 꿈뻑거리면서 뭐가 문제인지를 한참 고민하다 허무하게 해결하고 남기는 오늘의 삽질 기록... 🙄
오늘의 허당짓을 찾아준 GPT에게 무한한 감사를 남기며,. 샤라웃투지피티
두 정수
left와right가 매개변수로 주어집니다.left부터right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
뭔 소리야 이게.. 하고 한참 읽다 ① left 이상 right 이하의 모든 숫자(num)의 약수를 찾고 ② 그 약수의 개수가 몇 개인지 따져서 ③ num을 더하거나 빼라
로 파악 완료
나의 풀이 ① (문제의 코드)
function solution(left, right) {
let answer = 0;
let rangeNum = [];
for (let i=left; i<=right; i++){
rangeNum.push(i);
}
rangeNum.forEach(function(val,index){
const divisorCount = findDivisor(val);
// 약수의 개수가 짝수면 더하고 홀수면 뺌
if(divisorCount % 2 === 0) {
answer += val;
} else {
answer -= val;
}
});
console.log(answer);
}
function findDivisor(num){
let count = 0
for (let j=0; j<=num; j++){
if(num % j === 0) count ++;
}
return count;
}
solution(13, 17); // console ==> 43,
//프로그래머스 ==> undefined
solution(24, 27); // console ==> 52
//프로그래머스 ==> undefined
1. left 이상 right 이하의 모든 숫자 찾기
rangeNum 배열에 넣어줬다. 굳이 배열에 넣은 이유가 있냐고 물을 수 있지만 뭔가 각 함수나 구문별 역할을 확실하게 하고 싶었달까? 가독성 측면에서 이렇게 짜봤다.2. 약수의 개수가 몇 개인지 찾기
findDivisor() 함수를 만들어 약수의 개수를 찾아줬다. count라는 변수를 만들어서 약수에 해당할 때마다 count를 ++ 해주어 return한다.3. 약수의 개수를 판별하여 합산하기
rangeNum 배열에 있는 요소들을 forEach를 돌려 약수 개수를 찾는 함수 findDivisor()를 각각 먹여준다. findDivisor()에서 return한 count 값이 홀수이면 누적값에서 빼고, 짝수이면 누적값에 더한다.암만 봐도 잘 작동된다. 콘솔에 정답인 '43'과 '52'가 멀쩡히 찍히는데..! 왜 프로그래머스에 복붙만 하면
undefined가 뜨는지 도무지 알 수 없음 진짜진짜로 왜지..? 하면서 일단console.log(answer)부분을 지웠다. 콘솔은 일단 프로그래머스에 안 뜨니까.. 근데 이걸 지우면서도 결국return되는answer값이 없다는 걸 깨닫지 못함 😒
한참 고민하다 '근데 잠깐만,, 다 계산된answer값이 어디서 출력되지?..' 라고 의아해하면서 GPT한테 도움을 구했더니return값이 없어서 그런거랜다. 이 때 진짜 콧방귀 뀜 바본가? 아니다 말을 말자 ,... 이참에return공부나 더 해..
function solution(left, right) {
let answer = 0;
let rangeNum = [];
for (let i=left; i<=right; i++){
rangeNum.push(i);
}
rangeNum.forEach(function(val,index){
const divisorCount = findDivisor(val);
// 약수의 개수가 짝수면 더하고 홀수면 뺌
if(divisorCount % 2 === 0) {
answer += val;
} else {
answer -= val;
}
});
return answer;
}
function findDivisor(num){
let count = 0
for (let j=0; j<=num; j++){
if(num % j === 0) count ++;
}
return count;
}
solution(13, 17); // console ==> 43
//프로그래머스 ==> 43
solution(24, 27); // console ==> 52
//프로그래머스 ==> 52
solution() 함수에 return 값으로 answer를 내려준 것 뿐.. 허무해.. 허무하다.. 근데 탓 할 곳이 없지 내 탓이지 뭐 어쩌겠습니까..return을 사용하면 함수 실행이 종료되고, 호출한 곳으로 값을 반환한다. function add(a, b) {
return a + b;
}
const result = add(3, 5); // result는 8
console.log(result); // 8
: return 키워드는 값을 반환하고, 반환된 값은 함수 호출의 결과로 사용할 수 있다.
return이 없는 함수 function sayHello() {
console.log("Hello!");
}
const result = sayHello(); // 함수 호출은 "Hello!"를 출력하지만 반환값은 undefined
console.log(result); // undefined
: 함수에서 return을 명시적으로 사용하지 않으면, 함수는 undefined를 반환한다.
return으로 함수 실행 종료 function checkNumber(num) {
if (num > 0) {
return "Positive";
}
return "Non-positive";
}
console.log(checkNumber(5)); // "Positive"
console.log(checkNumber(-3)); // "Non-positive"
: return이 호출되면 함수의 나머지 부분은 실행되지 않고 종료된다.
console.log(checkNumber(5)); 의 경우 if문에서 숫자의 크기를 확인하고 "Positive"를 출력한 뒤 if문 밖에 있는 "Non-positive" 가 함께 출력되어야 할 것이라 생각할 수 있지만, return "Positive" 에서 return 에 의해 함수가 종료된다. function getUser() {
return { name: "Alice", age: 25 };
}
const user = getUser();
console.log(user.name); // "Alice"
: return은 숫자, 문자열, 객체, 배열, 함수 등 모든 JavaScript 값을 반환할 수 있다.
return function outerFunction() {
function innerFunction() {
return "Inner value";
}
return innerFunction(); // 내부 함수의 반환값을 외부 함수에서 반환
}
console.log(outerFunction()); // "Inner value"
: 중첩된 함수에서 return은 각각의 함수 범위에 영향을 미친다.
하나하면 기초를 둘하면 탄탄하게
기초를!!!!!! 탄탄하게!!!!!!! 기초를!!!!!! 탄탄하게!!!!!!! .. 끝