회고

[Main-Project 개발일지]-13

Happy Programmer 2022. 9. 20. 23:48

오늘은 어제 작성한 issue를 보며 어떤 작업을 해야 할지를 파악한 다음
login, signup을 먼저 확인했다.
데이터를 입력받았을 때 유효성검사를 통한 출력값들을 관리하고
해당 데이터들의 결과에 따른 분기를 나눠 alert로 출력될 값을 바꾼 다음
두 컴포넌트 모두 fetch가 아닌 axios를 사용해서 데이터를 전송하게 수정하고
내부 버튼의 css를 마무리했다.

find부분으로 넘어와 css를 마무리한 다음 기능부분을 건드리려고 했으나
간단해보이는 페이지 디자인과는 다르게 엄청 복잡했다.(server가 없어서 더 그럴지도 모르겠지만)

일단 아이디 또는 비밀번호 찾기를 각각 눌렀을 때 반응할 수 있는 함수를 만들고 e.target.value를 통해 ID / Password 중 어떤걸 찾으려고 하는지 나누는 부분까지는 쉽게 구현할 수 있었지만 유저 이름 및 이메일과 일치하는 ID가 있는지 확인하는 부분은 get으로 찾을 수 있겠지만 비밀번호 부분에서 문제가 발생했다.
보안상 비밀번호를 바로 출력해줘서는 안될 것 같았고 해당 정보를 알고 있다고 해도 기존 비밀번호를 그대로 전송하는 것 또한 문제가 있기 때문에 비밀번호를 변경해서 사용해야 할 것 같았다.
하지만 아직 login도 처리할 수 없는 상태였기 때문에 password 수정을 요청했을 때 제대로 반응할지에 대해 알 수 없었으며 바꿀 password 또한 랜덤하게 요청해야 하는데 그 랜덤 부분을 server측에서 제대로 만들들 수 있을지에 대한 의문도 가지고 있었다.

잘 생각해보면 아이디 찾기정도는 이메일과 닉네임이 일치한다면 그 자리에서 alert를 통해 출력을 해줘도 괜찮을 것 같고 비밀번호도 랜덤화를 클라이언트측에서 해준 다음 
PATCH 또는 PUT으로 password를 수정하고 그 데이터를 emailJS로 보내도 될 것 같다.

내일은 mypage를 마무리하고 emailJS에 대한 부분을 생각해보고 password도 랜덤화하는 방법에 대해 생각해봐야겠다..





CT(1).조건에 맞는 정수의 개수는 다이얼이나 식당과 유사한 느낌으로 내려가지만 안타깝게도 1~9의 9가지 조건을 각자 분기해줘야 한다는 부분의 차이점이 있다.
각 자릿수의 다음 숫자는 2이하의 차이를 가지고 있어야 하기 때문에 1일 경우 1~3(0은 없다) 3인 경우 1~5, 7인 경우 5~9, 8의 경우 6~9 등의 차이나는 가짓수의 문제로
잘 생각해보면 아래 해결한 코드에서 3~7까지는 동일한 조건이기 때문에 &&를 통해 범위지정을 했으면 더 쉽게 풀 수 있었을 것 같다.
확실히 회고를 통해 한번 설명하며 지나가니 코드를 다듬을 수 있는 기회가 생긴다.
해결 코드는 아래와 같다.

let input = 100

let dp = [[1,1,1,1,1,1,1,1,1]] //처음은 당연히 모두 1가지 선택밖에 없다.
let result = 0

for(let i = 0 ; i < input-1 ; i++){
    dp.push(new Array(9).fill(0))
}

for(let i = 1 ; i < input ; i++){
    for(let j = 0 ; j < 9 ; j++){
        if(j === 0){ //j 0~8(1~9지만 idx값)
            dp[i][j] = (dp[i-1][j] + dp[i-1][j+1] + dp[i-1][j+2]) % 987654321
        }
        else if(j === 1){
            dp[i][j] = (dp[i-1][j-1] + dp[i-1][j] + dp[i-1][j+1] + dp[i-1][j+2]) % 987654321
        }
        else if(j === 2){
            dp[i][j] = (dp[i-1][j-2] + dp[i-1][j-1] + dp[i-1][j] + dp[i-1][j+1] + dp[i-1][j+2]) % 987654321
        }
        else if(j === 3){
            dp[i][j] = (dp[i-1][j-2] + dp[i-1][j-1] + dp[i-1][j] + dp[i-1][j+1] + dp[i-1][j+2]) % 987654321
        }
        else if(j === 4){
            dp[i][j] = (dp[i-1][j-2] + dp[i-1][j-1] + dp[i-1][j] + dp[i-1][j+1] + dp[i-1][j+2]) % 987654321
        }
        else if(j === 5){
            dp[i][j] = (dp[i-1][j-2] + dp[i-1][j-1] + dp[i-1][j] + dp[i-1][j+1] + dp[i-1][j+2]) % 987654321
        }
        else if(j === 6){
            dp[i][j] = (dp[i-1][j-2] + dp[i-1][j-1] + dp[i-1][j] + dp[i-1][j+1] + dp[i-1][j+2]) % 987654321
        }
        else if(j === 7){
            dp[i][j] = (dp[i-1][j-2] + dp[i-1][j-1] + dp[i-1][j] + dp[i-1][j+1]) % 987654321
        }
        else if(j === 8){
            dp[i][j] = (dp[i-1][j-2] + dp[i-1][j-1] + dp[i-1][j]) % 987654321
        }
    }
}
for(let i = 0 ; i < 9 ; i++){ //마지막 dp값 더해주기
    result = (result + dp[input-1][i]) % 987654321
}
console.log(result)