TIL_210223

멜로디·2021년 2월 23일
0

Today I Learned

목록 보기
2/30

오늘 배운 것

  • 코플릿 다시 풀기
  1. 변수와 자료형
  2. 조건문

변수와 자료형

문제

문자열을 인자로 받아서 느낌표를 붙여서 리턴해주는 함수 returnWordWithJoy가 있습니다. 함수 returnWordWithJoy의 첫 번째 인자로 문자열 "I love coding"을 넣어서 호출하고, 그 결과값을 변수 word에 할당하세요.

// 문자열을 인자로 받아서 느낌표를 붙여서 리턴 해주는 함수 returnWordWithJoy가 있습니다.
// 함수 returnWordWithJoy의 첫 번째 인자로 문자열 "I love coding"을 넣어서 호출하고,
// 그 결과값을 변수 word에 할당하세요.

// TODO : 이곳에 코드를 입력합니다

// 아래 코드는 변경하지 마세요
function returnWordWithJoy(word) {
  if (typeof word !== 'string') {
    return 'wrong type';
  } else {
    return word + '!';
  }
}

나의 오류

이건 사실 아주 부끄럽게 문제를 잘 못 읽어서 생긴 오답이다.
Pre코스를 한번 이수해 보았기 때문에 완전 방심했다.
결과값을 변수 word에 할당하라는 지시를 인지하지 않아서
let word = returnWordWithJoy('I love coding')을 입력해야 하는데,
returnWordWithJoy('I love coding')만을 입력했다....

아...창피.....

그래서 배운 점이 무엇인가

문제 풀때는 물론이고, 로직과 코드를 짤 때 내가 해야 하는 일을 정확히 파악한 뒤 실행에 옮긴다

조건문

문제 1

시, 분, 초를 입력받아 1초를 더한 결과값을 특정 형태의 메시지로 리턴해야 합니다.
~
입력
인자 1 hour : number 타입의 정수 (0 <= hour && hour < 24)
인자 2 minute : number 타입의 정수 (0 <= minute && minute < 60)
인자 3 second : number 타입의 정수 (0 <= second && second < 60)
~
출력
string 타입을 리턴해야 합니다.
1초 뒤에 {hour}시 {minute}분 {second}초 입니다 형식으로 리턴해야 합니다.
~
입출력 예시

let output = addOneSecond(14, 17, 59);
console.log(output); // --> '1초 뒤에 14시 18분 0초 입니다'
output = addOneSecond(1, 59, 59);
console.log(output); // --> '1초 뒤에 2시 0분 0초 입니다'
output = addOneSecond(3, 24, 29);
console.log(output); // --> '1초 뒤에 3시 24분 30초가 입니다'
output = addOneSecond(23, 59, 59);
console.log(output); // --> '1초 뒤에 0시 0분 0초 입니다'

나의 오류 코드

function addOneSecond(hour, minute, second) {

//결과를 담을 변수들을 선언한다
let hh = 0
let mm = 0
let ss = 0

// second가 0보다 크거나 같고, 59보다 작거나 같을 때 ss에 second를 더한다
// second가 60일 때 ss는 0, mm에 1을 더한다
if(second === 60){
  ss = 0;
  mm = mm + 1
} else {
  ss = ss + second + 1
}

// minute가 0보다 크거나 같고, 59보다 작거나 같을 때 mm에 minute를 더한다
// minute가 60일 때 mm과 ss는 0, hh에 1을 더한다 
if(minute === 60){
  ss = 0;
  mm = 0;
  hh = hh + 1
} else {
  mm = mm + minute
}

// hour가 0보다 크거나 같고 23보다 작거나 같을 때 hh에 hour를 더한다
// hour가 24일 때 hh, mm, ss를 모두 0으로 만든다.
if(hour === 24){
  ss = 0;
  mm = 0;
  hh = 0;
} else {
  hh = hh + hour
}


//리턴한다
return `1초 뒤에 ${hh}${mm}${ss}초 입니다`

}

원인

코드 자체도 굉장나게 원시적으로 풀었는데, 치명적인 실수도 했다.
내가 작성한 코드는 조건문이 처음 입력받은 그 순간만 판정하여 작동하기 때문에
addOneSecond(6, 59, 59)를 입력받으면 1초 뒤에 6시 60분 60초 입니다를 리턴해버린다.

해결

조건문을 변경하였다. 인자값에 +1을 한 것이 비교되도록 변환하니 모든 것이 다 해결되었다.

최종 코드

function addOneSecond(hour, minute, second) {

//결과를 담을 변수들을 선언한다
let hh = 0
let mm = 0
let ss = 0

// second가 0보다 크거나 같고, 59보다 작거나 같을 때 ss에 second를 더한다
// second가 60일 때 ss는 0, mm에 1을 더한다
if(second +1 === 60){
  ss = 0;
  mm = mm + 1
} else {
  ss = ss + second + 1
}

// minute가 0보다 크거나 같고, 59보다 작거나 같을 때 mm에 minute를 더한다
// minute가 60일 때 mm과 ss는 0, hh에 1을 더한다 
if(minute +1 === 60){
  ss = 0;
  mm = 0;
  hh = hh + 1
} else {
  mm = mm + minute
}

// hour가 0보다 크거나 같고 23보다 작거나 같을 때 hh에 hour를 더한다
// hour가 24일 때 hh, mm, ss를 모두 0으로 만든다.
if(hour+1 === 24){
  ss = 0;
  mm = 0;
  hh = 0;
} else {
  hh = hh + hour
}


//리턴한다
return `1초 뒤에 ${hh}${mm}${ss}초 입니다`

}

레퍼런스 코드가 나와 다른 점

로직 자체는 크게 다른 점이 없다. 판정과 초기화 방법만 조금 다를 뿐이다.
내 코드도 나쁘진 않았으나 조건 판정을 잘못 했던 것이니, 나중에 코드 작성이 능숙해지면 코드 압축 연습을 해 보는 것도 좋을 것 같다.

profile
하루하루 배울때마다 기록하는 일기장

0개의 댓글