오늘은 백엔드에서 자료가 넘어오면 여유있게 시작하자고 하고 프론트는 각자 학습시간을 가졌는데 (회원가입, 로그인 유지 등) 오전이 아니라 오후로 연기되고 회의시간은 3시에 잡혔다.

회의를 대략적으로 마친 후 프론트에서는 router 정리를 시작했다.
sidebar가 모든 곳에 적용되는데 router 내부로 sidbar를 옮기면 router가 작동되지 않아(router 사이에는 다른 컴포넌트를 넣으면 안된다) 해결이 되지 않았는데

sidebar를 제거하고 sidebar가 필요한 컴포넌트들에 각각 sidebar를 import해주고 css를 수정해 페이지를 조정해줬다.

내가 담당하는 부분은 아니지만 답변이 여러개일 수 있으므로 답변은 answered 배열의 길이가 1 이상인 경우 mapping 해주면 될 것 같다.

태그부분의 css를 수정하고 fetch로 임시 파일들을 넣을 수 있었지만
데이터는 목요일 오후쯤에 받을 수 있다고 하는 것 같아서 아직까지 테스트를 해보기는 애매한 상황이다.

내일은 회원가입 봇 부분 처리, 비로그인 상태 헤더 관리, css 추가정리를 해야겠다.



CT(1).줄어들지 않아라는 문제는 0~9까지의 숫자 중 앞자리가 0이 될 수 있는 숫자들 중에 감소하지 않는 순서를 보유한 숫자들의 갯수를 구하는 문제다. 예를 들면 4자리 숫자의 경우 0000, 0001, 0566 등은 가능하지만 0132, 9998, 1565등 각 자리의 숫자 앞보다 작아지는 경우 탈락?인 문제로 dp를 이용해 해당 자릿수 위와 좌측의 값들을 더한 만큼이 가능한 숫자이다. 예를 간단히 들자면 0으로 끝나는 숫자 뒤에는 최종적으로 0밖에 들어갈 수 없어 평생 1개의 숫자를 가지고 있지만 (0000000...0000) 9는 어떤 자리에도 들어갈 수 있으므로 모든 자릿수에서 가능하다.(전 단계에서 나온 모든 숫자에 9를 붙일 수 있다) 코드는 아래와 같다.
(테스트케이스가 천개 이하인 문제였다)

let input = `64
2
3
4`.split('\n').map(Number) //64는 최대치값이 BigInt로 처리해야되는지를 체크해봤던 것으로 테스트케이스가 3개이므로 3이 맞다.

let dp = [] //dp배열
let result = [] //결과값이 들어갈 result 배열
let max = Math.max(...input.slice(1)) //테스트케이스의 갯수를 제외한 진짜 테스트들 중 가장 큰 값까지만 dp를 구하기 위한 max값 찾기(64로 해도 무방하지만 낭비가 있다.)
for(let i = 0 ; i <= max ; i++){ //max값까지의 계산을 위한 배열 추가
    dp.push(new Array(10).fill(0)) //0~9까지 10개로 고정이므로 10이 들어갔다.
}

for(let i = 0 ; i <10 ; i++){
    dp[1][i] = 1 //1자릿수는 무조건 1이 들어가므로 1로 초기화
}

for(let i = 2 ; i <= max ; i++){
    dp[i][0] = 1 //몇자릿수든 0으로 끝나는 것은 단 한개(000, 0000000 등) 
}

for(let i = 2 ; i <= max ; i++){
    for(let j = 1 ; j < 10 ; j++){
        dp[i][j] = dp[i-1][j] + dp[i][j-1] //dp 위, 왼쪽 그러니까 경로 갯수 찾기와 유사하게 더해준다.
    }
}


for(let j = 1 ; j < input.length ; j++){
    let sum = 0 //일반적으로는 result지만 result가 요구되는 테스트케이스가 여러개라 
                //for문 내부에서 각각 계산해준 후 result로 push해준다.
    for(let i = 0 ; i < 10 ; i++){
        sum += dp[input[j]][i]  //해당하는 dp배열의 합 한바퀴 돌리는 과
    }
    result.push(sum)
}
console.log(result.join('\n')) //출력 요구대로 '\n'처리




CT(2).문제를 해결하던 중 아래 코드가 무한로딩이 걸리는데 그 원인을 알 수 없다..
일단 계속해서 해결 시도중이긴 하지만 해결 시도로 이것저것 수정해본 상태가 지금 코드인데 물론 지금 이 코드로도 무한로딩이 걸려버린다. 
알고보니 j = b라고 해서 문제였다.. 원래는 j === b를 해야한다.

let input = `2 100
10 60 40
50 90 20`.split('\n')

for(let i = 0 ; i < input.length ; i++){
    input[i] = input[i].split(' ').map(Number)
}
let nums = input[0][0] 
let dest = input[0][1]
let arrs = input.slice(1)
let dp = new Array(dest+1).fill(0)

for(let i = 0 ; i < nums ; i++){
    let [a,b,c] = arrs[i]
    for(let j = 1 ; j <= dest ; j++){
        if( j = b ){
            dp[j] = Math.min(dp[j-1]+1 , dp[j-b+a] + c)    
        }
        else{            
            dp[j] = dp[j-1]+1
        }
    }
}

console.log(dp[dest])

 

추가로 이 상태로는 예제가 통과되지 않아 else에서는 dp[j]로 Math.min으로 비교하게 했으며 if에서도 dp[j]를 비교할 수 있게 했다. 또한 input[i][1]번째 값의 순서가 정렬되지 않아 sort를 통해 정렬해주고 나니 예제가 정상적으로 진행되었다.

 


CT(3).비밀번호라는 문제는 이렇게 푸는게 맞나 싶긴 하지만 각 번호를 이동할 수 있는 경우의 수를 각자 번호 자릿수에 부여한 뒤 10자리의 dp를 구한 후 갱신된 dp를 dp로? 기록해 사용했는데 지금 생각해보면 이차원dp를 사용하는 것과 별반 차이는 없는 것 같다.
다만 코드를 보면서 이해하기는 더 쉬울 것 같다.

let input = `3
1
2
3
1000`.split('\n').slice(1).map(Number)

let num = Math.max(...input)
let dp = new Array(10).fill(1)
let result = [0, 10]
for(let i = 2 ; i <= num ; i++){
    let arr = []
    let sum = 0
    arr[0] = (dp[7])%1234567
    arr[1] = (dp[2] + dp[4])%1234567
    arr[2] = (dp[1] + dp[3] + dp[5])%1234567
    arr[3] = (dp[2] + dp[6])%1234567
    arr[4] = (dp[1] + dp[5] + dp[7])%1234567
    arr[5] = (dp[2] + dp[4] + dp[6] + dp[8])%1234567
    arr[6] = (dp[3] + dp[5] + dp[9])%1234567
    arr[7] = (dp[4] + dp[8] + dp[0])%1234567
    arr[8] = (dp[5] + dp[7] + dp[9])%1234567
    arr[9] = (dp[6] + dp[8])
    dp = [...arr]
    for(let j = 0 ; j < 10 ; j++){
        sum += arr[j]
    }
    result.push(sum%1234567)
}

let results = []
for(let i = 0 ; i < input.length ; i++){
    results.push(result[input[i]])
}

console.log(results.join('\n'))

'회고' 카테고리의 다른 글

[Pre-Project 개발일지]-8  (0) 2022.09.01
[Pre-Project 개발일지]-7  (0) 2022.08.31
[Pre-Project 개발일지]-5  (0) 2022.08.29
[Pre-Project 개발일지]-4(주말)  (0) 2022.08.28
[Pre-Project 개발일지]-3(주말)  (0) 2022.08.27

+ Recent posts