조건문 문자열 코플릿을 풀었다. 그 중에서 가장 조건이 많고 복잡했던 문제를 푼 과정을 기록해보자.
점수를 입력받아 점수에 해당하는 등급을 리턴하는 문제였다.
인자로는 number타입의 스코어이고 큰 틀에 맞춰 5등급으로 나뉘고 세부요소로 +혹은 -를 결정하여 뒤에 추가적으로 함께 리턴하는 문제였다.
조건이 많은 문제에서 가장 중요한 부분은 문제에 제시된 조건들을 정리하며 문제를 푸는 방향을 제시할 수도코드를 작성하는 일이다.
// 1. 100점 초과 0미만을 먼저 빼준다
// 2. 100점은 A+로 바로 리턴
// 3. 60미만도 F로 바로 리턴
// 4. 십의자리를 변수 선언하고 등급 할당
// 5. 일의자리를 변수 선언하고 + or - 할당
// 6. 두 변수를 합하여 리턴
조건에 맞춰 수도코드를 작성하였고 수도코드를 따라 코드를 작성하였다.
// 1. 100점 초과 0미만을 먼저 빼준다
if (score > 100 || score < 0) {
return 'INVALID SCORE'
}
// 2. 100점은 A+로 바로 리턴
if (score === 100) {
return 'A+'
}
// 3. 60미만도 F로 바로 리턴
if (score < 60) {
return 'F'
}
// 4. 십의 자리를 변수 선언하고 등급 할당
let tendigit = ''
if (score >= 90) {
tendigit = 'A'
} else if (score >= 80) {
tendigit = 'B'
} else if (score >= 70) {
tendigit = 'C'
} else if (score >= 60) {
tendigit = 'D'
}
// 5. 일의 자리를 변수 선언하고 조건에 맞춰 +혹은 - 할당
let unitdigit = ''
if (score % 10 >= 8) {
unitdigit = '+'
} else if (score % 10 <= 3) {
unitdigit = '-'
} else {
unitdigit = ''
}
// 6. 두 변수를 합하여 리턴
return tendigit + unitdigit
}
문제를 충분히 이해하고 수도코드를 작성하는 것이 코드를 깔끔하게 만들어준다는 것을 느꼈다. 좀 더 복잡한 문제 속에서도 좋은 수도코드를 만들어내기 위해 노력이 필요할 것 같다.
숫자형 변수를 다룰 때에 쓰이는 Math 메소드의 종류는 다양하다.
그 중에서도 앞으로 많이 다룰만한 내용들에 대해서는 정리를 하고 넘어가야겠다는 생각이 들었다.
Math.abs(x) 숫자의 절대값을 반환한다.
Math.ceil(x) 인자보다 크거나 같은 수 중에서 가장 작은 정수를 반환한다. 처음봤을 때는 말이 어려운 듯 했지만 수학적으로 흔히 말하는 '올림'이다.
Math.floor(x) 인자보다 작거나 같은 수 중에서 가장 큰 정수를 반환한다.
(내림)
Math.round(x) 숫자에서 가장 가까운 정수를 반환한다. (반올림)
Math.pow(x , y) x의 y 제곱을 반환한다.
Math.max(...) 가장 큰 수를 반환한다. ( <=> Math.min(...) )
Math.random() 0과 1사이의 난수를 반환한다.
역시나 많이 쓰이는 문자열 메소드에 대해 정리해보자.
str.indexOf(value) value로 입력한 값이 문자열 안에서 첫 번째로 나타나는 인덱스 값을 반환한다.
let A = 'Myname'
A.indexOf('n')
=> 2
str.includes(value) value로 입력한 값이 문자열 안에 존재하는지 여부를 나타내며 Boolean타입을 반환한다.
A.includes('n')
=> true
A.includes('p')
=> false
str.split(seperator) 문자열을 분리하는 데 분리하는 기준으로 seperator를 활용한다.
A.split('n')
(2) ['My', 'ame']
str.toLowerCase() 문자열을 모두 소문자로 바꾼다 ( <=> str.toUpperCase() )
A.toLowerCase()
=> 'myname'
A.toUpperCase()
=> 'MYNAME'
str.substring(a,b) 문자열의 a번째 인덱스부터 b-1번째의 인덱스 까지를 추출한다. (= str.slice(a,b) )
A.substring(1,4)
=> 'yna'
주의 : 문자열 메소드는 원본은 그대로 유지된다는 특징을 갖고 있다.