본문 바로가기

코드스테이츠 FE 45기

Section 1 - Unit (5) 조건문 문제풀이

  • 문제 7번 

문제:
시, 분, 초를 입력받아 1초를 더한 결과값을 특정 형태의 메시지로 리턴해야 합니다.
조건:
string 타입을 리턴해야 합니다.
1초 뒤에 {hour}시 {minute}분 {second}초 입니다 형식으로 리턴해야 합니다.

 

내 답

function addOneSecond(hour, minute, second) {
  // TODO: 여기에 코드를 작성합니다.
  if (hour === 23 && minute === 59 && second === 59) {
    return `1초 뒤에 0시 0분 0초 입니다`
  } else if (minute === 59 && second === 59) {
    return `1초 뒤에 ${hour+1}시 0분 0초 입니다`
  } else if (second === 59) {
    return `1초 뒤에 ${hour}시 ${minute+1}분 0초 입니다`
  } else {
    return `1초 뒤에 ${hour}시 ${minute}분 ${second+1}초 입니다`
  }
}

 

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 + '초 입니다';
}

 

후기 :

백틱 이용한 템플릿 리터럴 써먹을 때 재미있었다. 사실 ${second+1} 이란 게 되나? 갸우뚱 하면서 했는데 얼렁뚱땅 된 느낌. 리퍼런스를 보니 내꺼보다 훨씬 직관적이고 다른 사람들이 손보기에도 더 좋을거 같다? 이런 생각이 들었다. 내 경우엔 그냥 문제풀이만 하느라 조건문도 얼렁뚱땅이다. 왕초보 라이브 세션도 듣긴 했지만 어떻게 조건문을 짜야 효율적이고 간결해보일까?에 대한 답을 모르겠다. 

 

 

 

  • 문제 6번

문제:

점수를 입력받아 점수에 해당하는 등급을 리턴해야 합니다.
조건:

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) {
  // TODO: 여기에 코드를 작성합니다.
  
  function plusAndMinus(score) {
    if((score % 10) >= 8) {
      return '+'
    } else if((score % 10) <= 3) {
      return '-'
    } else {
      return ''
    }
  }

  if ( score > 100 || score < 0) {
    return 'INVALID SCORE'
  } else if (score === 100) {
    return 'A+'
  } else if (score >= 90) {
    return `A${plusAndMinus(score)}`
    } else if (score >= 80) {
      return `B${plusAndMinus(score)}`
    } else if (score >= 70) {
      return `C${plusAndMinus(score)}`
    } else if (score >= 60) {
      return `D${plusAndMinus(score)}`
    } else {
      return 'F'
    }
    }

  일의 자릿수 찾으려고 참고한  사이트 https://medium.com/jongah-tech-blog/splice-slice-split-94816d793f96

 

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;
}

 

후기 :

제일 어려웠던 문제. 사실 배운 정석대로면 함수를 아직 안배웠으니 +- 부분도 조건문 속에 조건문 넣는다던지 해서 쭉 나열하면 되긴 할 것 같지만 함수를 활용해서 간결해 보이도록 만들고 싶었다. 다시보니 레퍼런스랑 비슷한 부분이 많아서 왠지 기분이 좋다? 정답에 근접한 것 같아서. 

여기서도 리턴에 백틱을 이용했는데 , 이유는 레퍼런스에서처럼 변수를 선언은 하고싶어서 시도했으나 자꾸 에러가 떠서다. 변수를 넣기 시작하면 머릿속이 꼬여서인지 입력값과 변수를 어떻게 입력해야 할지 헷갈리면서 내 맘대로 적어버리고 어김없이 에러가 나는 것 같다. 지금은 백틱이 편하긴 한데(그리고 왠지 백틱이 재밌다..) 어차피 갈수록 변수 선언하는 거에 대해 익숙해져야 할 테니 앞으론 변수를 더 활용해 보려고 한다.

 

 

 

** 페어 분이 주신 팁 

집중적으로 공부할 것

break continue (반복문에서 중요)
for in (배열이랑 객체 배울때 중요)

** 문제풀이 할 수 있는 곳

프로그래머스 백준 

** 혼자 문제풀이 하다 막힐 땐 디버거 작동시켜보자

'코드스테이츠 FE 45기' 카테고리의 다른 글

Section 1 - Unit (6) 계산기 구현하  (0) 2023.04.21
Section 1 - Unit 5 반복문 문제  (0) 2023.04.20
Section 1 - Unit (5)  (0) 2023.04.18
Section 1 - Unit (4) 계산기 목업 후기  (0) 2023.04.17
Section 1 - Unit (4)  (0) 2023.04.14