til

영화 리스트 6일 차 @마무리+오류 수정+코드카타

fpzmfks 2024. 8. 7. 20:00

오늘로써 다른 팀과 결과물을 공유하고 프로젝트를 완료했다. 다른 팀들이 한 것을 보고 부러웠던 것은 비밀번호 암호화/복호화였는데, 상상도 못했던 기능이라 언제 한 번 이런 것도 한 번 해보고 싶다고 생각했다. 그리고 우리 팀에서 의논한 이번 팀 프로젝트에 대한 의견은 아래와 같다. 

 

Keep - 현재 만족하고 있는 부분

  • 스케줄에 맞춰서 일정이 잘 끝났다.
  • 맡은 기능에 대한 공부하는 시간이 되었다.

Problem - 불편하게 느끼는 부분

  • dev 브랜치를 좀 더 초반에 만들어서 파일들을 병합했어야 했다.
  • js 파일명 중에서 핵심 기능을 나타내는 파일이 없었다.
  • 의사소통이 원활하지 않았던 부분이 있고, 개인적으로 의견을 피력하기에는 어려움이 있었다.

Try - Problem에 대한 해결책, 당장 실행 가능한 것

  • 코드 리뷰 시간이 많이 만드는 게 좋겠다.
  • 코드에 주석을 잘 달아놓는 것도 하나의 방법인거 같다.

 


그리고 이렇게 팀 프로젝트가 마무리된 이후에 이르러서 오류를 찾게 되었다. 계기는 전날에 splice에 매개변수로 element를 줘도 되는지에 대해 튜터님께 물어보러 간 것이었는데, 설명을 들으니 splice에 전달된 index가 아닌 매개변수는 자바스크립트에 의해 숫자로 변환되고, 내 경우 element는 숫자가 아니므로 isNaN, 즉 falsy=0으로 나타났다는 것이다.

그러므로 arr.splice(0,1)은 arr의 0번째 요소만 삭제할 수 있었고, 당연히 내가 구현한 리뷰 기능도 여러 개의 리뷰 중 첫번째 리뷰만 삭제할 수 있도록 동작되는 중이었다. 검증을 게을리한 폐해였다. 

그래도 이제라도 알았으니 코드를 수정했다. 

 

문제의 코드

for (const element of reviewData) {
        if (deletePassword === element.password) {
          deleteCard = reviewData.splice(element, 1);
          break;
        }
      }

 

수정한 코드

for (let i = 0; i < reviewData.length; i++) {
        if (deletePassword === reviewData[i].password) {
          reviewData.splice(i, 1);
          break;
        }
      }

 

돌고 돌아 정석 for문으로 리뷰 삭제 기능을 구현했다. break를 넣어야 비밀번호가 같은 리뷰가 있어도 하나의 리뷰만 삭제가 되는데, index를 값으로 가지는 foreach문은 반환값이 항상 undefined이기 때문에 break를 할 수 없어서 정석 for문으로 index 값을 구하는 방식으로 코드를 수정했다. 

 

그리고 이렇게 코드를 다시 한 번 살피는 와중에 먼젓번에 생각했던 map/set은 리뷰 기능에서 쓰라고 제시한 필수문법이 아니라는 것을 깨달았다. 보기에 map/set은 리뷰기능과 같이 유동적으로 데이터를 변조하는 데에는 크게 유용한 기능은 아닌 것 같기 때문이다. 아마 영화 데이터를 다루는 데에 사용하라고 제시한 문법이 아니었을까 싶다. 


그리고 어제도 개인적으로 코드카타를 하긴 했지만 오늘부터 코드카타가 정식으로 캠프의 데일리 루틴에 편입되어서 코드카타를 하게 되었다. 나는 오전에 1개, 오후에 1개로 2개를 풀었는데, 행렬의 덧셈 문제와 직사각형 별찍기 문제였다. 

 

이 중 간단한 것은 직사각형 별찍기 문제로, 처음보는 코드 형태라 많이 당황하긴 했어도 그냥 for문 좀 돌려주면 되는 문제였다. 

process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
    const n = data.split(" ");
    const a = Number(n[0]), b = Number(n[1]);
    const star = '*'.repeat(a)
    for(let i = 1; i<=b; i++) {
        console.log(star);
    }
});

다만 저 process.stdin에 대해 이해하고 있다고 말하긴 어렵다...

 

 

그리고 행렬의 덧셈 문제는 지금까지 시간복잡도 같은 문제로 비효율적이라 지양해야한다고 들었던 이중 for문을 사용해야 해서 좀 당황했는데, 이 또한 해내긴 했다. 

function solution(arr1, arr2) {
    let answer = [];
    for(let i=0; i<arr1.length; i++) {
        let sumarr =[]
        for(let j = 0; j<arr1[i].length; j++) {
            sumarr.push(arr1[i][j]+arr2[i][j])
        }
        answer.push(sumarr.splice(0,arr1[i].length))
    }
    return answer;
}

다른 사람의 풀이를 보니 다른 사람들도 반복문 비슷한 걸 이중으로 돌려야 했던 건 마찬가지라 그래도 이중 for문이 아예 안 쓰이는 문법은 아닌건가 싶었다.