BE THE DEVELOPER

10월 19일: 문제 정의하고 README.md 작성하기 본문

일기장/우아한테크코스 7기

10월 19일: 문제 정의하고 README.md 작성하기

미역굳 2024. 11. 2. 18:00

이제는 더이상 미룰 수 없다. 입출력 방식도 알아냈고 테스트 방식도 대략 이해했으니 실제로 기능 구현을 어떻게 할지 적힌 README.md를 작성할 때가 됐다. 해당 내용을 작성하기에 앞서서, 기능 구현 관련해서 좋은 글이 올라온게 있어서 정리해보려 한다.

 

그거에 앞서서 에어비앤비 가이드를 자동으로 적용할 수 있는 방법이 있다고 해서 링크를 올려둔다. 물론 WebStorm에서만 사용 가능한거라 알아두기만 하려고 한다.

 

https://gist.github.com/mentos1386/aa18c110dc272514d592ec27e98128be

기능을 어떤 단위로 정리해야 할까?

사진은 블로그에 올리기 좀 뭐해서 내 개인 노션에만 남기고, 내 방식대로 어떻게 정리할 지를 구상해보기로 했다.

[문제 정의] 주어진 문제들을 적용하기 위해 분석하자.

이번 문제를 보고 생각보다 쉬워보여서 당황했었는데, 이 문제를 오류 없이 코드를 짜기 위해서는 문제를 확실하게 정의할 필요가 있다고 생각했다.

  • 입력은 문자열로 받으며, 이 문자열은 구분자와 숫자로 이루어져 있다.
    • 여기서 입력 받을 수 있는 숫자는 자바스크립트에서 이용할 수 있는 숫자형에 포함되는 값들로 정의한다.
    • 또한 양수로 한정지어야 한다.
  • 구분자는 문자열 앞 //와 \n 사이에 존재하는 문자를 커스텀 구분자와 :, ,로 이루어져 있다.
    • 커스텀 구분자에 사용되는 문자는, 아스키 코드에 존재하는 문자로 한정지어서 진행하려 한다. 커스텀 구분자는 하나로 한정 짓는다.
    • 이모지나 한글 등 유니코드에 존재하는 문자들은 실제 문자로 어떻게 표현되는지를 확인해볼 필요가 있다.
    • 구분자를 결정하는데 사용되는 \n는 아래 테스트 코드를 보았을 때처럼 줄바꿈을 의미하는게 아닌, 실제 문자열 “\n”을 의미하는 것이다.

  • 구분한다는 것은 리스트의 슬라이싱 기능을 기반으로 생각한다.
    • 즉, 구분자가 두 번 연속해서 나올 경우에는 빈문자열이 발생하므로 문자가 되지 않는다.

[기능 요약] 구현해야 할 기능들을 나열하자.

preprocess: 문자열을 구분하기 전 전처리 과정임.

  • 문자열을 입력받았을 때, 해당 문자열로부터 커스텀 구분자 여부를 파악함.
  • 있었다면, 커스텀 구분자 부분이 지워진 문자열과 커스텀 구분자를 반환함.

slice: 문자열을 구분자로 구분함.

  • 주어진 구분자들로 문자열을 숫자 단위로 쪼개는 작업을 함.
  • 더해야 할 숫자들로 배열을 만들어 반환함.

sum: 주어진 배열에 있는 각 숫자들의 합을 구함.

  • 배열에 주어진 숫자들의 합을 구하여 반환함.

위에 내용을 봤을 때, 내용이 빈약해보인다면 사실이다. 이렇게 여러 절차로 구분하여 진행한 이유는 중간중간에 에러 처리를 할 코드가 필요하기 때문이다. 이 다음 절차가 바로 에러 처리이다.

[에러 처리] 기능 별로 일어날 문제를 미리 대비하자.

preprocess: 문자열을 구분하기 전 전처리 과정임.

  • 문자열을 입력받았을 때, 해당 문자열로부터 커스텀 구분자 여부를 파악함.
    • 커스텀 구분자를 결정하는 //와 \n, 하나의 문자로 이루어진 커스텀 구분자까지 모두 정상적으로 존재하는지 확인함.
  • 있었다면, 커스텀 구분자 부분이 지워진 문자열과 커스텀 구분자를 반환함.

slice: 문자열을 구분자로 구분함.

  • 주어진 구분자들로 문자열을 숫자 단위로 쪼개는 작업을 함.
    • 문자열을 순회하며 숫자 및 구분자 이외의 문자가 존재하는 지 확인함.
    • 숫자를 표현하는 문자에 구분자가 포함되어 있는지를 확인함. 즉, 숫자가 구분자인지를 확인함. (예시: 16진수, 소수, e를 이용한 지수 표현)
  • 더해야 할 숫자들로 배열을 만들어 반환함.

sum: 주어진 배열에 있는 각 숫자들의 합을 구함.

  • 배열에 주어진 숫자들의 합을 구하여 반환함.
    • 숫자들이 일정한 형식으로 반환될 수 있도록 모두 10진수의 형태로 맞춰 줌.

물론 이외에도 수많은 오류 상황이 존재하겠지만, 실제 채점 과정에서 어떤 문제가 생길지 모르겠다. 예를 들어 구분자가 연속해서 등장하는 것을 나는 문제로 보지 않았지만 에러로 처리해야 될 수도 있는 것이다.

[테스트 및 검토] 테스트케이스를 통해 반례를 찾고, 성능을 개선하자.

테스트 관련해서는 내가 위에서 정의한 문제 상황들을 대표할 수 있는 반례를 제시하여 해당 반례를 기반으로 에러 처리를 해주는 과정이 필요하고, 성능 관련 스코어(시간 등)를 확인하여 성능을 개선하는 과정이 필요하다.

 

이번에는 테스트 코드가 미리 작성되어 있기 때문에 별다른 코드가 필요할지는 모르겠지만, 반례를 찾을 필요는 있다.