1. 문제와 이해

0과 1부터 시작을 하여 전에 있던 값들을 더해 n까지 계산을 해야 합니다.

또 기존의 값을 이용하여 효율적인 코드를 작성해야 합니다.

 

2. 계획

a 변수는 0을 할당을 하고 b 변수는 1을 할당합니다.
처음 반복문을 이용하여 sum 변수에 a 변수와 b 변수 값을 더합니다.
그리고 a 변수는 b의 값으로 초기화합니다.
b 변수는 sum 변수의 값으로 초기화합니다.
그리고 n까지 계산을 한 후 sum을 반환합니다.

 

3. 실패한 풀이

처음 작성한 코드 입니다.

return문에 1234567을 나누어 주었기 때문에 n이 1500일 경우 NaN이 출력 되었습니다.

NaN 값이 출력한 이유는 자바스크립트는 -2^53 ~ 2^53까지 정확한 계산이 가능하기 때문입니다.

그래서 처음부터 반복문에 계산을 할 때 1234567을 나누어 줘야 합니다.

이 생각을 하는데 시간이 오래 걸렸던 거 같습니다.

 

4. 성공한 풀이

 

5. 회고

이 문제를 풀 때 왜 NaN이 나오는지 제대로 몰랐습니다.
NaN 값이 나온 이유를 찾기 위해 공부를 하니 자바스크립트에 대해 조금 더 알게 되었습니다.
이 문제를 풀면서 언제 계산을 할 때 리턴 값이 크게 달라진다는 것을 알게 되었습니다.
또 알고리즘 문제를 푸는데 CS 지식도 중요하다는 것을 알게 되었습니다.
앞으로도 CS 지식을 쌓는데 노력을 해야겠습니다.

1. 문제와 이해

두 배열의 숫자를 하나씩 뽑아서 곱하면서 더하여 최솟값을 구해야 합니다.

모든 경우의 수를 구하는 대신 효율적인 방법을 이용해야 합니다.

하나의 배열은 제일 작은 값 다른 배열은 제일 큰 값을 곱해서 더하는 방식으로 풀어야 합니다.

 

2. 계획

A 배열을 오름차순으로 정렬합니다.

B 배열을 내림차순으로 정렬합니다.

반복문을 이용하여 새로운 배열들의 요소들을 곱하고 더합니다.

 

3. 풀이

 

4. 회고

처음 모든 경우의 수를 계산해서 최종 값을 리턴을 할까 고민을 하였다.
하지만 너무 비효율적인 방법인 거 같아서 효율적인 방법을 찾아 고민을 하였다.
내가 생각한 방법은 한 배열에서 가장 작은 값과 다른 배열에서 가장 큰 값을 곱해서 더하는 방식이였다.
이 방식이면 각 배열들의 곱해서 더한 값의 최솟값을 구할 수 있었다.
이제 이 방법을 코드로 바꾸는게 어려웠었다.
Math.min 메소드를 이용하거나 reduce를 이용하면서 많이 막혔었다.
그래도 포기하지 않고 계속 코드를 작성을 하니 문제를 풀수 있게 되었다.
이 문제를 풀면서 포기하지 않고 계속 시도를 하면 문제를 풀수 있다는 것을 알게 되었다.
앞으로 더 효율적으로 문제를 풀수 있게 노력을 해야겠다!!

1. 문제와 이해

괄호는 왼쪽 괄호부터 시작을 해야한다.

오른쪽 괄호부터 시작을 하면 false을 리턴해야 한다. 

왼쪽 괄호와 오른쪽 괄호의 수는 같아야 한다.

 

2. 계획

왼쪽 괄호부터 시작을 하면 answer 변수에 +1을 해준다.

answer 변수가 0이라면 오른쪽 괄호부터 시작이니 바로 false을 리턴해 준다.

반복문 마지막 줄에는 answer 변수를 -1을 해준다.

즉 answer 변수가 0이라면 true이다.

 

3. 풀이

 

4. 회고

이번 문제는 시간 복잡도 때문에 오래 걸린 문제이다.

어떻게 하면 시간 복잡도를 개선하면서 풀 수 있을까 많이 고민을 하였다.

일치 연산자인 ===보다는 동등 연산자인 ==을 사용하여 시간 복잡도를 개선하였다.

그리고 후위 연산자를 사용하였더니 시간 복잡도 문제가 발생하여 전위 연산자를 사용하여 풀었다.

나는 시간 복잡도를 더 개선하기 위해 공부를 해야겠다.

테스트란?
프로그래밍에서 테스트는 마우스로 클릭하는 거를 대신해 주는 것을 말한다.
만약에 백엔드 개발자가 API를 만들지 않았고 기능을 미리 만들어야 한다면 테스트를 어떻게 할 것인가? 그때는 목업 API를 이용하여 테스트를 해야 한다.
ex) API 요청

테스트 코드란?
내가 만든 기능을 검사해 주는 코드를 테스트 코드라고 한다.


테스트 코드를 작성하는 이유?
테스트 코드를 작성하는 이유는 사전에 오류를 방지하기 위해서이다. 또한 사람이 일일이 테스트 코드를 작성하는 것보다. 테스트 코드로 테스트를 하는 게 더 효율적일 수 있기 때문이다.
예를 들어 소규모 프로젝트에서의 테스트는 사람이 직접 일일이 테스트를 하면 돼서 문제가 없다. 하지만 대규모 프로젝트에서의 테스트는 수십 개에서 수백 개 이상의 api들을 테스트를 한다면 사람이 직접 일일이 테스트를 하기가 힘들다. 그래서 테스트 코드를 작성하는 거다.

테스트 코드의 방법
단위 테스트: 단위 테스트는 버튼 클릭과 같은 기능 하나하나를 테스트한다. 테스트를 위해 사용하는 프레임워크는 보통 jest를 사용한다.

통합 테스트: 여러 기능을 한꺼번에 테스트를 한다. 테스트를 위해 사용하는 프레임워크는 jest이다.
E2E(End To End) 테스트: 로그인 후 결제를 하고 환불할 때 같은 시나리오가 있는 테스트를 할 때 사용한다. E2E 테스트를 진행할 때는 가상의 브라우저를 띄워 테스트를 한다.


테스트 코드 도구
Jest: 자바스크립트로 작성된 애플리케이션을 위한 테스트 프레임워크이다. 주로 단위 테스트와 통합 테스트에 사용된다.
Cypress: E2E 테스트를 위한 테스트 프레임워크이다. 가상 브라우저를 직접 실행하고 테스트를 할 수 있다.

TDD(Test-Driven-Development)
TDD란 테스트 주도 개발을 뜻한다. 먼저 테스트 코드를 작성하고 구현하는 방식을 말한다. 총 3가지 절차가 있다. 첫 번째 실패와 두번 째 성공 마지막으로 리팩토링 과정이 있다. TDD를 진행하면 작은 단위로 테스트 케이스를 작성하기에 코드의 양이 많아지지 않고 코드의 가독성이 좋아진다. 또 사전에 오류를 방지할 수 있다. 즉 안정적인 코드 개발을 할수 있다.

 

 

+ Recent posts