문자열, 조건문
#나는 왜 1차원적인 코드밖에 못짜는거지😭
1. 문자열
str[index]
: 해당 인덱스의 character를 불러올 수 있다. *단, read-only!!!!str.length
- 문자열끼리 + 연산자를 사용할 수 있다.
- 다른 타입과 + 연산하면 string으로 바뀐다. (toString)
c.f.str.concat(a, b)
: 여러개 붙이기 / 잘 사용하지 않는 것 같다.
1-1. string method
1. str.indexValue(searchValue)
‘Blue Whale’.indexOf(‘Blue’); // 0
‘Blue Whale’.indexOf(‘B’); // 0
‘Blue Whale’.indexOf(‘blue’); // -1 * 중복된다면 앞의 인덱스만
‘canal’.lastIndexOf(‘a’); // 3 *가장 뒤의 인덱스를 불러줌
c.f. str.includes(searchValue);
: 해당값 존재 여부만 확인
2. str.split(seperator)
: seperator를 기준으로 분할, array로 변환
csv.split('\n')
엑셀 크롤링에서, 줄바꿈 기준으로 나누어줌!
c.f. 다시 문자열로 바꾸려면, str.split("").join("")
❗️내가 자주하는 실수: (그래야할 때)쿼테이션 안에 제발... 공백 넣자.......... 😩
3. str.substring(start, stop)
: 구간 문자열을 가져온다. str.slice()
와 비슷!
- slice와 substring을 비교해보자
- 공통점
- start, stop 동일하면 "" return
- 인자가 1개 뿐이면 앞 인덱스 n까지 빼고 뒷부분 추출
let sentence = 'ohmygodness'; sentence.slice(3); // ygodness
- start나 stop 값이 문자열 길이보다 길면 str.length로 대체
str.substring()
- start > stop 이면 자동으로 교체
- 음수나 NaN 인덱스가 들어오면 0으로 대체
str.slice()
- start > stop 이면 "" return
- start가 음수이면 뒤부터 시작
- stop이 음수이면 str.length로 대체
4. str.toLowerCase()
, str.toUpperCase()
c.f. immutable method (한번 거쳐가도 기존 할당값은 변하지 않음)
조건문 문제를 풀어보자
Q3. 수를 입력받아 10과 같은지 여부를 리턴하라.
function equalsTen(num){
return Boolean(num === 10);
}
Check 👉🏾 Method Boolean. falsy 판별에도 쓸 수 있다!
Q7. 수를 입력받아 3, 5로 각각 나눈 뒤 나머지 값에 따라 알맞은 메세지를 리턴하라.
- 3으로 나누어 떨어지면, 'Fizz' 리턴
- 5로 나누어 떨어지면, 'Buzz' 리턴
- 3과 5로 모두 나누어 떨어지면, 'FizzBuzz' 리턴
- 3이나 5로 나누어 떨어지지 않으면, 'No FizzBuzz' 리턴
- 모두 string type으로 리턴할 것
👩🏽 나의 코드 나는 이렇게 if안에 if 넣는 방식을 자꾸 생각한다
function fizzBuzz(num){
if(num % 3 === 0){ // 3으로 나누어 떨어질 때
if(num % 5 === 0){ // 5로도 나누어 떨어진다면
return 'FizzBuzz'; // 모두 떨어지는 'FizzBuzz' 리턴
} else{
return 'Fizz'; // 5로는 안되면 'Fizz' 리턴
} else{ // 3으로는 안나누어 떨어지고
if(num % 5 === 0){ // 5로는 나누어 떨어진다면
return 'Buzz'; // 'Buzz'리턴
} else{ // 5로도 안되면 모두 안되는 'No FizzBuzz' 리턴
return 'No FizzBuzz';
}
}
}
👩🏫 Reference
function fizzBuzz(num){
if(num % 3 === 0 && num % 5 === 0){ // num % 15 === 0 으로도 표기하더라!
return 'FizzBuzz';
} else if(num % 3 === 0){
return 'Fizz';
} else if(num % 5 === 0){
return 'Buzz';
} else{
return 'No FizzBuzz';
}
}
Check 👉🏾 if안에 if넣는 가독성 떨어지는 코드를 짜지 말자!
Check 👉🏾 조건문은 폭포같다! 내려갈수록 걸러지니까 가장 작은 조건부터 나열하도록 생각하자.
Q9. 특정 달(month)을 입력받아 각 달에 며칠이 있는지 리턴하라.
function daysInMonth(month){
if(month === 2){
return 28;
} else if(month === 4 || month === 6 || month === 9 || month === 11){
return 30;
} else{
return 31;
}
}
Check 👉🏾 무조건 꼬아서 규칙 찾는게 빠른건 아니다. 조건이 3-4개 정도로 정리된다면 그냥 나누자!
[주말에 다시]Q13. 점수를 입력받아 점수에 해당하는 등급을 리턴하라.
- string type으로 리턴
- 각 등급의 최저 점수
- 90 이상 : A
- 80 이상 : B
- 70 이상 : C
- 60 이상 : D
- 60 미만 : F
- 점수가 100 초과 0 미만이면 'INVALID SCORE' 리턴
- 각 등급 최고 점수보다 7점 이하인 경우 등급과 함께 '-' 리턴 (단, 93점은 A)
- 각 등급 최저 점수보다 8점 이상인 경우 등급과 함께 '+' 리턴
- F+, F- 는 존재하지 않음
👩🏽 나의 코드
function convertScoreToGradeWithPlusAndMinus(score){
let grade; // 등급 변수 선언
let sign; // 쁠마 변수 선언
let unitDigit = score % 10; // 1의 자리수 선언
if(score > 100 || score <0){ // 에러 메세지
return 'InVALID SCORE';
}
// 점수별 A-F를 매긴다
if(score >= 90){
grade = 'A';
} else if(score >= 80){
grade = 'B';
} else if(score >= 70){
grade = 'C';
} else if(score >= 60){
grade = 'D';
} else{
grade = 'F';
}
if(socre === 100){ // 특수경우 1. 뒷자리 0이지만 100점은 A'+'
sign = '+';
} else if(score < 60){ // 특수경우 2. 뒷자리 0이지만 제로
sign = '';
} else{ //이외 규칙에 맞게 쁠마제로 부여
if(unitDigit >= 0 && unitDigit <= 3){
sign = '-';
} else if(unitDigit >= 8 && unitDigit <= 9){
sign = '+';
} else{
sign = '';
}
}
return grade + sign;
}
👩🏫 Reference
function plusOrMinus(score) {
const extra = score % 10;
if (extra <= 2) {
return '-';
} else if (extra >= 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;
}
Check 👉🏾 고정된 숫자가 어떤 값을 대변한다면 그 값을 쓰자!! ex. score > 60 대신, grade !== 'F'
Check 👉🏾 F에 쁠마 안붙이는걸 저렇게 보여줄 수 있구나....🤭
[주말에 다시]Q14. 삼각형의 세 변을 입력받아 직각삼각형(pythagorean)인지 여부를 리턴하라.
- 제곱을 구하는 세가지 방법을 모두 사용해라.
arr.sort
사용 금지- 제곱을 구할 때 입력변수 그대로 사용할 것
👩🏽 나의 코드
function isPythagorean(side1, side2, side3) {
if(Math.max(side1, side2, side3) === side1){
return (side1 ** 2 === side2 ** 2 + side3 ** 2)
}
else if(Math.max(side1, side2, side3) === side2){
return (Math.pow(side2,2) === Math.pow(side1,2) + Math.pow(side3,2))
}
else{
return (side3 * side3 === side2 * side2 + side1 * side1)
}
👩🏫 Reference
function isPythagorean(side1, side2, side3) {
const pow1 = side1 * side1;
const pow2 = side2 ** 2;
const pow3 = Math.pow(side3, 2);
if (pow1 === pow2 + pow3 || pow2 === pow1 + pow3 || pow3 === pow1 + pow2) {
return true;
}
return false;
}
Check 👉🏾 여러 경우 중 하나라도 되는 경우에 대해 Boolean 출력일 때는 논리 연산자를 좀 활용하자...
Check 👉🏾 뭔가 반복되는 것 같으면 선언해서 간단히 쓸 생각을 하자
[주말에 다시]Q16. 시, 분, 초를 입력받아 1초를 더한 결과값을 특정 형태의 메세지로 리턴하라.
- 0 <=
hour
&&hour
<= 24- 리턴 값 : 1초 뒤에 {hour}시 {minute}분 {second}초 입니다
👩🏽 나의 코드
function addOneSecond(hour, minute, second) {
if(second === 59){ // 59초일 때
second = 0; // 1초가 더해지니 초 단위는 0으로 바꾸고
if(minute === 59){ // 게다가 59분이기까지 하면
minute = 0; // 밀려서 1분이 더해지니 분 단위도 0으로 바꾸고
if(hour === 23){ // 게~다가 23시라면
hour = 0; // 또 밀려서 1시간 더해지니 시간단위는 0으로 바뀐다 (여기까지 23시 59분 59초 특수 상황에 대해
} else{
hour += 1; // 23시가 아니라면 원래 시간 + 1
}
} else{
minute += 1; // 59분이 아니라면 원래 분 + 1
}
} else{
second += 1; // 59초가 아니라면 원래 초 + 1
}
return '1초 뒤에 ' + hour + '시 ' + minute + '분 ' + second + '초 입니다'
}
👩🏫 Reference
function addOneSecond(hour, minute, second) {
if (second === 59) {
minute += 1;
second = 0;
} else {
second += 1;
}
if (minute === 60) {
hour += 1;
minute = 0;
}
if (hour === 24) {
hour = 0;
}
return '1초 뒤에 ' + hour + '시 ' + minute + '분 ' + second + '초 입니다';
}
Check 👉🏾 59초->60초로 가는 순간이 아니면 min, hr는 특수 상황을 겪지 않는다. 그러니 second가 59일 때를 기준점으로 잡자!
Check 👉🏾 시, 분에 대한 if문은 초 if문의 첫번째 조건을 건너왔을 때만 실행된다. (아니라면 60, 24가 될 일이 없다)
Check 👉🏾 분과 시가 각각 1씩 넘겨받아 60, 24가 되는 특수 상황에 대한 조건문만 추가하면 된다. (특수 상황 아니면 그냥 넘어가도록)
Author And Source
이 문제에 관하여(문자열, 조건문), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@titaniumdiana/0616-문제-풀면서-열받고-해낸-다음-싹-식는-짜릿함을-맛보다저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)