2020. 6. 27. 22:50ㆍRetrospection/Sprint
7.
"convertScoreToGrade" 함수를 작성하세요.
점수가 주어졌을때, "convertScoreToGrade" 함수는 주어진 점수와 대응하는 등급을 문자열로 반환합니다.
Notes:
-
(100 - 90) --> 'A'
-
(89 - 80) --> 'B'
-
(79 - 70) --> 'C'
-
(69 - 60) --> 'D'
-
(59 - 0) --> 'F'
-
만약 주어진 점수가 100을 초과하거나 0 미만이라면 문자열 INVALID SCORE 를 반환해야 합니다.
function convertScoreToGrade(score) {
// 여기에 코드를 작성하세요
}
function convertScoreToGrade(score) {
if(90 <= score && score <= 100){
return 'A'
}else if (80 <= score && score <= 89){
return 'B'
}else if (70 <= score && score <= 79){
return 'C'
}else if (60 <= score && score <= 69){
return 'D'
}else if (0 <= score && score <= 59){
return 'F'
}else {
return 'INVALID SCORE'
}
}
내가 한방법이 위의 방법이라면
function convertScoreToGrade(score) {
let grade;
if (score > 100 || score < 0) {
return 'INVALID SCORE';
}
if (score === 100) {
return 'A';
}
if (score >= 90) {
grade = 'A';
}
else if (score >= 80) {
grade = 'B';
}
else if (score >= 70) {
grade = 'C';
}
else if (score >= 60) {
grade = 'D';
}
else if (score >= 0) {
grade = 'F';
}
return grade;
}
이런 식으로 100 이상 0이하 숫자 따로 ,
100 도 따로 리턴한뒤
뒤따르는 조건문들을 간단하게 만드는 방법도 있다.
아래의 방법이 더 깨끗해보인다.
아까 의사코드(수도코드) 작성법 이라는 글을 봤었는데 ,
좀 긴 코드를 써야 할때는 의사코드로 간단하게나마 정리해놓고 코딩을 시작하는것도 좋겠다.
지금은 회고하느라 거의 3번째 보는 문제여서 아주 익숙해서 금방 짰지만
처음할땐 좀 오래걸렸었기 때문에 ..
앞으로라도 의사코드 만드는 연습을 해보자 .
8.
"convertScoreToGradeWithPlusAndMinus" 함수를 작성하세요.
점수가 주어졌을때, "convertScoreToGradeWithPlusAndMinus" 함수는 주어진 점수와 대응하는 등급을 문자열로 반환합니다.
Notes:
- (100 - 90) --> 'A'
- (89 - 80) --> 'B'
- (79 - 70) --> 'C'
- (69 - 60) --> 'D'
- (59 - 0) --> 'F'
- 만약 주어진 점수가 100을 초과하거나 0 미만이라면 INVALID SCORE 를 반환해야 합니다.
- 만약 점수의 1의 자리가 0~2 사이라면 등급과 함께 '-'를 반환해야 합니다.
- 만약 점수의 1의 자리가 8~9 사이라면 등급과 함께 '+'를 반환해야 합니다.
- F+ 와 F- 는 존재하지 않습니다.
function convertScoreToGradeWithPlusAndMinus(score) {
// 여기에 코드를 작성하세요
}
우선 코드가 좀 복잡해 보이기 때문에 의사코드를 작성해 보았다
- 점수 1의자리 숫자에 따라 + -를 반환하는 함수를 만든다
- function plusMinus 라는 이름으로 만든다
- 매개변수를 num으로 한다
- 1의자리가 0~2 인 숫자는 등급과 함께 -를 반환해야 한다
- 1의자리가 3~7인 숫자는 등급과 함께 아무것도 반환하지 않아야 한다.
- 1의자리가 8~9인 숫자는 등급과 함께 +를 반환해야 한다
-
- 숫자에 대응하는 문자를 리턴하는 함수를 만든다
- 위의 function plusMinus (num) 함수를 let grade 으로 선언한다.
- function convertScoreToGradeWithPlusAndMinus (score) 함수를 사용한다 .
- 100-90 , 80-89 , 70-79 , 60-69 , 0-59 에 대응하는 문자를 리턴하는 조건문를 만든다
- 여기서 100은 grade 를 더하면 -가 리턴되므로 따로 조건문을 만들어서 A+를 리턴한다.
- 각 조건문의 리턴값에 grade 를 더한다
- 0-59 는 F+와 F- 가 존재하지 않는다
- 주어진 점수가 0미만이거나 100을 초과 하는 조건문을 만들고 'INVALID SCORE '를 리턴한다
함수를 두개 만들었다.
1. + - 반환 함수
2. 등급 리턴 함수
처음에는 2번
함수를 1번 함수에다가 대입시켜 보려고 했는데 0~59 는 +와 - 값이 없기때문에 그렇게 만들기가 어려울 것 같았다.
그래서 1번함수를 2번 함수에 활용하기로 했다.
function plusMinus(score){
if(0 <= score%10 && score%10 <=2 ){
return '-'
}else if(score%10 === 8 || score%10 === 9){
return '+'
}else {
return ''
}
};
function convertScoreToGradeWithPlusAndMinus(score) {
let grade = plusMinus(score); //<----- let grade = function plusMinus(score)
// 라고 하니까 에러가 계속 났다.
if(100 === score){
return 'A+'
}else if(90 <= score && score <= 99){
return 'A'+ grade
}else if(80 <= score && score <= 89){
return 'B'+ grade
}else if(70 <= score && score <= 79){
return 'C'+ grade
}else if(60 <= score && score <= 69){
return 'D' + grade
}else if(0 <= score && score <= 59){
return 'F'
}else {
return 'INVALID SCORE'
}
}
위의 코드가 내가 짠 코드
두번째 하는건데도 엄청 헤맸다...
다 잘 짠거같은데 에러가 자꾸 나서 보니까 let grade = function plusMinus 라고 했었다.
함수 표현식 에서는 function을 쓰면 안되는데..
그리고 또 다른 코드로는 이런식으로 짤 수도 있다 .
function plusOrMinus(score) {
if (String(score)[1] <= 2) {
return '-';
}
else if (String(score)[1] >= 8) {
return '+';
}
else {
return '';
}
}
function convertScoreToGradeWithPlusAndMinus(score) {
let grade;
if (score > 100 || score < 0) {
return 'INVALID SCORE';
}
if (score === 100) {
return 'A+';
}
if (score >= 90) {
grade = 'A';
}
else if (score >= 80) {
grade = 'B';
}
else if (score >= 70) {
grade = 'C';
}
else if (score >= 60) {
grade = 'D';
}
else if (score >= 0) {
grade = 'F';
}
if (grade !== 'F') {
grade = grade + plusOrMinus(score);
}
return grade;
}
내가 구글링을 엄청 못하는건지... String(score)[1] 이게 뭔지 모르겠는데
느낌상 일의자리 숫자를 스트링으로 도출해내는 함수인것 같다.
확실히 10으로 나눠서 계산하지 않아도 되니 훨씬 간단하고 깔끔해 보인다.
그리고 신기한것이 if 를 하나 쓰면 그다음 조건문에는 무조건 else if 를 쓰다가 else 로 마무리 해야되는줄 알았는데
위의 코드에서는 if 가 세번이나 반복되서 쓰였고
마지막 else 는 생략되었다.
와 그리고 내 코드랑 같은 코드라고 생각했는데 ,
마지막에
if (grade !== 'F') {
grade = grade + plusOrMinus(score);
}
return grade;
이부분이 정말 신기하다 .
F 가 아닐경우 에만 grade 를 더해주는 방법이 있었구나 .
그리고 처음에 let grade 라고 선언을 하고
매번 리턴하지 않고 마지막에 더하고 나서
grade 자체를 리턴하는것도 대박이다..
진짜 너무 재밌네 신기하다........
'Retrospection > Sprint' 카테고리의 다른 글
1. 문자열 1~3 (0) | 2020.06.28 |
---|---|
0. 조건문 9 , 10 (0) | 2020.06.28 |
0. 조건문 4~6 (0) | 2020.06.27 |
0. 조건문 1~3 (0) | 2020.06.27 |
$-1 함수 1~3 (0) | 2020.06.26 |