[Coplit] 20190824

Let's TECH🧐·2019년 10월 6일
0

오늘 리뷰해볼 문제는 Pre Course 과제의 Testbuilder step3 문제이다.

문제

Testbuilder에서는 어떤 카드 번호를 input으로 받아, 카드 회사의 이름을 return하는 함수를 만들어내야 한다.

그 중에서도 step3는 앞의 네 자리 숫자가 '5018', '5020', '5038', '6304'로 시작하고 12 이상 19 이하의 length를 가지고 있는 카드 번호를 input으로 받으면, "Maestro" 라는 카드 회사 이름을 반환하는 함수를 만들어야 했다.

해결방법

먼저, 오랜 시간 고민하여 풀어보았지만 step3를 통과하지 못했던 코드는 다음과 같다.

describe("Maestro", function() {
  // Maestro 카드를 판별 할 수 있는 모든 경우의 수를 확인할 수 있는 테스트를 작성해보세요.

  let num = "12345678";

  for (let length = 12; length < 20; length++) {
    detectNetwork("5018" + num)
    detectNetwork("5020" + num)
    detectNetwork("5038" + num)
    detectNetwork("6304" + num)
    
    num = num + '1';
  }
});

length가 12에서 부터 19가 될 때까지 num에 '1'을 8회 반복해서 추가해주는 식으로 문제를 해결해보려 했다.

그런데, 문제가 통과되지 않아서 이 함수가 어떻게 작동하는지 알아보기 위해 4개의 detectNetwork 위쪽에 console.log를 입력하여 어느 부분이 문제인 건지 찾아보았다.

for (let length = 12; length < 20; length++) {
    console.log("5018" + num)
    detectNetwork("5018" + num)
    
    console.log("5020" + num)
    detectNetwork("5020" + num)
    
    console.log("5038" + num)
    detectNetwork("5038" + num)
    
    console.log("6304" + num)
    detectNetwork("6304" + num)
	
	num = num + '1';
  }

이렇게 해보았더니, 중간 과정은 전부 내가 의도했던 대로 진행되는데 최종 값으로 "123456711111111"이 출력되었다.

이 부분을 어떻게 해결해야 할지 고민하다가, 최종 값으로 num이 출력되지 않게 하기 위해 num = num + '1'을 위쪽으로 옮겼다.

let num = '1234567' // '12345678'에서 '1234567'로 수정하였다.

for (let length = 12; length < 20; length++) {

    num = num + '1';
    
    detectNetwork("5018" + num)
    detectNetwork("5020" + num)
    detectNetwork("5038" + num)
    detectNetwork("6304" + num)
  }

또 위쪽에서 num = num + '1'을 해준 후, detectNetwork에 num이 들어가기 때문에 기존에 '12345678'로 선언했던 num을 '1234567'로 바꿔주어 앞의 네 자리 숫자를 포함한 전체 카드 번호의 길이가 12에서 시작해 19로 끝날 수 있도록 코드를 수정하였다. 이렇게 코드를 수정한 끝에, testbuilder의 step3 문제를 통과할 수 있었다.

사실 Testbuilder 과제를 풀 때 step1은 무난하게 통과할 수 있었지만, step2와 step3는 정말 막막했다. 이렇게 막막할 때는 github에 올라온 다른 수강생분들의 풀이 방법을 조금씩 참고하여 문제를 풀었다.

느낀 점

나와 같은 부분에서 문제가 해결되지 않아 고민하는 수강생분들의 질문과 엔지니어 분들의 답변을 참고하여 코드를 이리저리 옮겨보고 console.log를 찍어보고 계속 고민하다보니, 내가 작성한 코드에서 어느 부분이 문제가 되어 테스트에 통과하지 못한 것인지 알 수 있었다. 특히, 마지막에 num = num + '1'의 자리를 위쪽으로 옮겨주어야 제대로 된 값이 출력된다는 것을 알았을 때는 정말 속이 시원했다.

앞으로 남은 Pre Course의 과제들이 얼마나 어려울지는 모르겠지만 그 때도 지금처럼 생각하는 시간을 넉넉히 가지고 어떤 부분이 문제여서 답이 나오지 않는 건지 여러 방법으로 고민한다면, 남은 과제들도 충분히 잘 해결해낼 수 있을 것이다!

profile
Minju's Tech Blog

0개의 댓글