두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
각 수의 약수들을 담은 배열을 만들고, 그 배열의 길이가 홀수인지 짝수인지 구분해서 계산하는 방식으로 접근했다. 그래서 일단 이중for문을 만들어 약수가 담긴 numOfFac이라는 배열을 만들었다.
function solution(left, right) {
let answer = 0;
for (let i = left; i <= right; i++) {
let numOfFac = [];
for (let j = 1; j <= i; j++) {
if (i % j === 0)
numOfFac.push(j);
}
}
여기까지 작성한 다음 console.log(numOfFac)을 확인해보면 다음과 같다. (left로 13, right가 17이라는 값을 넣었다.)
[ 1, 13 ]
[ 1, 2, 7, 14 ]
[ 1, 3, 5, 15 ]
[ 1, 2, 4, 8, 16 ]
[ 1, 17 ]
바라던 대로 각 수의 약수들이 배열로 반환되었다. 이제 이 배열의 길이를 재서 홀수면 -, 짝수면 +를 해주면 된다. 내가 작성한 최종 코드는 다음과 같다.
function solution(left, right) {
let answer = 0;
for (let i = left; i <= right; i++) {
let numOfFac = [];
for (let j = 1; j <= i; j++) {
if (i % j === 0)
numOfFac.push(j);
}
if (numOfFac.length % 2 === 0) {
answer += i;
} else {
answer -= i;
}
}
return answer;
}
지난 번에 "대문자 변환" 문제에서 썼던 toUpperCase()를 똑같이 사용했지만, 대소문자를 판별하는 과정만 추가했다. 그래서 비교적 간단하게 해결할 수 있었다.
대문자와 소문자가 같이 존재하는 문자열을 입력받아 대문자는 소문자로 소문자는 대문자로 변환하여 출력하는 프로그램을 작성하세요.
function solution(s) {
let answer = "";
for (let x of s) {
if (x === x.toUpperCase()) {
answer += x.toLowerCase();
} else {
answer += x.toUpperCase();
}
}
return answer;
}
N개의 문자열이 입력되면 그 중 가장 긴 문자열을 출력하는 프로그램을 작성하세요.
내가 처음 생각했던 방식은 string의 length를 재서 긴 길이를 가진 string을 answer로 return 하는 거였다. 다음이 내가 처음에 작성했던 코드다.
function solution(s) {
let answer = "";
for (let i = 0; i <= s.length; i++) {
for (let j = 1; j <= s.length; i++) {
if (s[i].length >= s[j].length) {
answer = s[i];
} else answer = s[j];
}
}
return answer;
}
let str = ["teacher", "time", "student", "beautiful", "good"];
console.log(solution(str));
하지만..
Uncaught TypeError: Cannot read properties of undefined (reading 'length')
역시 어림없었다.
그래서 max라는 최대값을 뜻하는 변수를 만들고, 이중for문 대신 그냥 for-of문을 사용했다. MIN_SAFE_INTEGER를 통해 초기값으로 가장 작은 정수를 설정해두고, 각 요소를 돌며 긴 length를 가진 값을 answer로 할당하는 방식의 풀이다.
function solution(s) {
let answer,
max = Number.MIN_SAFE_INTEGER;
for (let x of s) {
if (x.length > max) {
max = x.length;
answer = x;
}
}
return answer;
}