코플릿에서 어려웠거나 인상깊었던 문제만 작성해 보았습니다.
점수를 입력받아 점수에 해당하는 등급을 리턴
인자 1: score
number
타입의 정수string 타입을 리턴해야 합니다.
각 등급의 최저 점수는 아래와 같습니다. ('F'의 경우 최대 점수를 표기)
90 이상 --> 'A'
80 이상 --> 'B'
70 이상 --> 'C'
60 이상 --> 'D'
60 미만 --> 'F'
만약 주어진 점수가 100을 초과하거나 0 미만인 경우, 문자열 'INVALID SCORE'를 리턴해야 합니다.
각 등급의 최고 점수보다 7점 이하인 경우, 등급과 함께 '-'를 리턴해야 합니다. (단, 93점의 경우에는 A를 리턴해야 합니다.)
각 등급의 최저 점수보다 8점 이상인 경우, 등급과 함께 '+'를 리턴해야 합니다.
F+ 와 F- 는 존재하지 않습니다.
function convertScoreToGradeWithPlusAndMinus(score) {
let sign = score % 10 // 점수 1의자리 구하기
if (score >= 90 && score <= 100) {
if (sign >= 8 || score === 100) { // score = 100이거나 1의자리 숫자가 8 이상인 경우
return 'A+'
} else if (sign <= 2) { // 1의자리 숫자가 2 이하인 경우
return 'A-'
}
return 'A';
} else if (score >= 80 && score <= 89) {
if (sign >= 8) {
return 'B+'
} else if (sign <= 2) {
return 'B-'
} else {
return 'B';}
} else if (score >= 70 && score <= 79) {
if (sign >= 8) {
return 'C+'
} else if (sign <= 2) {
return 'C-'
}
return 'C';
} else if (score >= 60 && score <= 69) {
if (sign >= 8) {
return 'D+'
} else if (sign <= 2) {
return 'D-'
}
return 'D';
} else if (score >= 0 &&score < 60) { // F는 +, - 없이 리턴
return 'F';
// 점수가 위의 모든 조건을 충족하지 않는 경우(100을 초과하거나 0 미만인 경우),
// 문자열 'INVALID SCORE'를 리턴
} else {
return 'INVALID SCORE';
}
}
여기서 +
-
기호를 붙여주는 함수를 따로 만들어 붙여주면 코드 가독성이 더 좋을 것 같다.
function plusOrMinus(score) {
let sign = score % 10 // 점수 1의자리 구하기
if (sign >= 8) { // 1의자리 숫자가 8 이상인 경우
return '+'
} else if (sign <= 2) { // 1의자리 숫자가 2 이하인 경우
return '-'
} else { // 그 외
return ''
}
}
function convertScoreToGradeWithPlusAndMinus(score) {
let grade; // A-F까지의 값을 넣을 변수를 선언
if (score === 100) { // score = 100인 경우
return 'A+'
}
if (score >= 90 && score <= 100) { // 점수 범위에 따른 등급 나눠주기
grade = 'A';
} else if (score >= 80 && score <= 89) {
grade = 'B';
} else if (score >= 70 && score <= 79) {
grade = 'C';
} else if (score >= 60 && score <= 69) {
grade = 'D';
} else if (score >= 0 &&score < 60) {
grade = 'F';
} else {
return 'INVALID SCORE';
}
if (grade !=='F') {
return grade + plusOrMinus(score) // grade가 F가 아닌 경우, 기호 붙여서 리턴
} else {
return grade // 그 외(grade === 'F')에는 grade만 리턴
}
}
1 이상의 자연수를 입력받아 소수(prime number)인지 여부를 리턴
인자 1 : num
number
타입의 수boolean
타입을 리턴
function isPrime(num) {
// 소수: 1과 자기 자신으로만 나누어지는 수
// 0,1은 소수가 아님
if (num < 2) {
return false;
}
// 2를 제외한 짝수는 소수가 아님
if (num === 2) {
return true;
}
if (num % 2 === 0) {
return false;
}
// 2까지는 위에서 확인 했으므로 3부터 확인, 홀수만 확인하면 되니 증감식은 2씩 더하기
for (let i = 3; i < num; i+=2) {
if (num % i === 0) { // num 자신보다 작은 수 까지 나누었을 때 딱 떨어지는 수가 있다면
return false;
}
}
return true;
}
불필요한 연산을 줄이기 위해 소수 확인하는 for문에서 num의 제곱근(이하 정수) 까지만 확인하는 조건식으로 변경해도 됨
function isPrime(num) {
// 소수: 1과 자기 자신으로만 나누어지는 수
// 0,1은 소수가 아님
if (num < 2) {
return false;
}
// 2를 제외한 짝수는 소수가 아님
if (num === 2) {
return true;
}
if (num % 2 === 0) {
return false;
}
// 2까지는 위에서 확인 했으므로 3부터 확인, 홀수만 확인하면 되니 증감식은 2씩 더하기
for (let i = 3; i <= Math.floor(Math.sqrt(num)); i+=2) {
if (num % i === 0) { // num의 제곱근 이하 정수까지 나누었을 때 딱 떨어지는 수가 있다면
return false;
}
}
return true;
}
2 이상의 자연수를 입력받아 2부터 해당 수까지의 소수(prime number)들을 리턴
인자 1 : num
number
타입의 정수 (num
>= 2)string
타입을 리턴해야 합니다.
2-3-5-7
의 형식으로 리턴해야 합니다.
이중 반복문(double for loop)을 사용해야 합니다.
function listPrimes(num) {
// 2 이상의 자연수를 입력받아 2부터 해당 수까지의 소수들을 리턴해야 합니다.
// 2-3-5-7의 형식으로 리턴해야 합니다.
// 외부 반복문: 2부터 자기자신(num)까지 반복하면서 내부반복문 실행 + 문자열 추가
// 내부 반복문: 이 수가 소수인지 판단
let result = '2'; // 무조건 2로 시작할 예정이므로 문자열 '2' 할당
for (i = 3; i <= num; i += 2) {
let isPrime = true; // 소수 판단 값을 넣어줄 변수 선언
// 소수 판단 식
for (let j = 3; j <= Math.floor(Math.sqrt(num)); j += 2 ) {
if (i % j === 0) {
isPrime = false;
}
}
if (isPrime === true) { // 소수인 경우 result에 문자열 추가
result = result + `-${i}`
}
}
return result;
}
문자열을 입력받아 해당 문자열을 처음부터 한 글자(letter)씩 다시 작성하려고 합니다. 이 때, 한 글자를 추가할 때마다 부분적으로 완성된 문자열을 전부 이어붙인 문자열을 리턴해야 합니다.
let output = makeMarginalString('abc');
console.log(output); // --> 'aababc'
output = makeMarginalString('flower');
console.log(output); // --> 'fflfloflowfloweflower'
output = makeMarginalString('');
console.log(output); // --> ''
function makeMarginalString(str) {
// 이중 반복문(double for loop)을 사용해야 합니다.
// str.slice, str.substr, str.substring 사용은 금지됩니다.
// 빈 문자열을 입력받은 경우에는 빈 문자열을 리턴해야 합니다.
let result = ''
// 외부반복문: 반복횟수 결정. str의 길이만큼 반복
for (let i = 0; i < str.length; i++) {
// 내부반복문: 몇 개의 문자를 더해줄건지(문자열 추가를 몇 번 반복할건지)
for (let j = 0; j <= i; j++) {
result = result + str[j]
}
}
return result
}