화요일까지 배포가 완료되야 하는 상황이기 때문에
일단 번들링과 웹팩을 다시 한번 읽어봤는데 생각보다 복잡한 것 같다.
예전에 배울 때는 내 파일로 진행했지만 가이드를 따라 진행했기 때문에 금방 할 수 있었는데
이번에는 깃허브에 배포하면 안될 것 같은 생각이 드는데 그럼 어떻게 처리해야 할지 난감하다.
추가적으로 내가 받은 부분이 페이지네이션과 관련이 있는 부분이기 때문에
페이지네이션에 대해 학습했는데 페이지네이션을 구현하기 위해서도
서버에서 데이터를 먼저 받아서 확인해야 제대로 할 수 있을 것 같다.
일단 대략적인 틀은 총 페이지 수를 받아서 1~n까지 뿌려준 후 각 링크를 해당 페이지네이션 페이지와 연동하고 페이지네이션 내부 페이지들을 뿌려주는 방식이 서버와 소통이고
프론트에서 구현하는 방법은 전체 페이지를 받아서 나눠준 후 해당 배열에서 꺼내서
mapping을 해주면 되는 것 같다.
내일 프론트 배포에 대한 이야기가 없으면 이 부분 구현을 시도해봐야겠다.
문제는 api명세서가 확실하지 않고 데이터가 넘어오지 않기 때문에
제대로 구현됬는지 확인하면서 진행할 수 없는 부분이 조금 불안하다.
CT(1).행렬 제곱이라는 문제는 n*n 행렬의 x제곱을 구하는 문제였다.
이런 문제는 이미 피타고라스 행렬에서 해결해봤기 때문에 쉽게 생각했지만
피타고라스는 2x2로 고정되어 있고 이 문제는 2x2~5x5까지의 4가지 행렬이었다.
솔직히 하드코딩을 해도 괜찮은 4가지긴 하지만 학습을 하기 위해 하는 것이기 때문에
행렬곱을 구현해봤다.
처음으로 해보기 때문에 힘들긴 했지만 행렬곱을 구하고
이전에 했던 것 처럼 재귀로 거듭제곱을 쪼개주고 결과값이 잘 나오는 부분을
확인한 다음 제출했으나 1초도 안걸려서 바로 오답이 나와버렸다.
자세히 보니 범위값이 피타고라스만큼은 아니지만 천억제곱까지 가버리기 때문에
BigInt처리를 해야만 했다.
그리고 다시 살펴보니 결과값이 원하는 글자형태로 출력이 아닌
이중배열의 형태로 결과값만 보이고 있었기 때문에 for문을 통해
결과값을 텍스트로 출력되게 변경시켰다.
어려운 문제일수록 해결했다는 성취감이 커져서 사소하지만 중요한
입력조건, 출력조건을 간과하게 되는 것 같다.
제출을 또 했으나 틀려서 자세히 살펴보니 말도 안되는 조건들이 숨겨져 있었다..
1회 제곱을 원하는데 내부 값들은 1000이라 1000으로 나눈 나머지를 출력하라는 결과에 해당하지 않는 문제였다.
솔직히 1회 제곱을 원해서 이 문제를 사용하지는 않을 것이기 때문에 굳이 이렇게 해야하나 싶긴 하지만 잘못한 부분에 대해서는 인정하고 빠르게 수정했다. 해결 코드는 아래와 같다.
let input = `3 3
1 2 3
4 5 6
7 8 9`.split('\n')
for(let i = 1 ; i < input.length ; i++){
input[i] = input[i].split(' ').map(Number) //배열 numer값 변환
}
let size = Number(input[0].split(' ')[0]) //size 받아오기
let num = BigInt(input[0].split(' ')[1]) //제곱계수 BigInt로 받아오기
let arr = input.slice(1)
let sum
function multy(arr,arr2){ //행렬 a,b곱 공식(n*n으로 동일한 사이즈만 가능)
let result = []
for(let i = 0 ; i < size ; i++){
result.push(new Array(size).fill(0))
}
for(let i = 0 ; i < size ; i++){
for(let j = 0 ; j < size ; j++){
sum = 0
for(let k = 0 ; k < size ; k++){
sum += arr[i][k] * arr2[k][j]
}
result[i][j] = sum%1000 //1000으로 나눈 나머지 받아오기(문제조건)
}
}
return result
}
function recurtion(arr,n) { //제곱수 1/2로 분할하는 재귀함수
if(n === 1n){
return arr
}
if(n%2n === 1n){ //홀수인 경우 arr * arr^2 ^(n-1)/2형태로 재귀처리
return multy(arr,recurtion(multy(arr,arr) ,(n-1n)/2n))
}
else{ //짝수인 경우 arr^2 ^(n/2)형태로 재귀처리
return recurtion(multy(arr,arr), n/2n)
}
}'회고' 카테고리의 다른 글
| [Pre-Project 개발일지]-13 (0) | 2022.09.06 |
|---|---|
| [Pre-Project 개발일지]-12 (1) | 2022.09.05 |
| [Pre-Project 개발일지]-10(주말) (0) | 2022.09.03 |
| [Pre-Project 개발일지]-9 (0) | 2022.09.02 |
| [Pre-Project 개발일지]-8 (0) | 2022.09.01 |
