시작하자마자 프로젝트 팀원이 모여 main 통합작업을 하고
main -> dev -> front/back -> 개인으로 통하는 branch 분할 작업을 끝냈다.
다행히 기능들은 얼추 정돈했기 때문에 main에 통합시키고 넘어갈 수 있어서 마음이 놓였다.
이제 충돌나지 않게 프론트 팀원분과 관리할 컴포넌트를 나눴는데
메인, 메인(비로그인), 레시피 상세조회, 냉장고,냉동실,냉장실 부분을 하시기로 하고
나는 회원가입,로그인,아이디/비밀번호 찾기, 내정보, 재료추가하기, 재료수정하기, 레시피 추천받기를 하기로 했다.
일단 회원가입, 로그인, 아이디/비밀번호 찾기, 내정보, 재료추가, 재료수정, 레시피추천 7가지를 각각 issue로 만든 다음 필요한 부분들에 대해 작성해서 해야 할 일들에 대해 확인하고 팀원들도 볼 수 있게 만드는 것이 중요할 것 같다.
프로젝트를 진행하면서 issue를 관리하자는 말이 있었지만 아직까지 제대로 올라오지 않고 있는 상황이고 나도 처음 올린게 14가지 전체 layout 28h짜리였기 때문에 제대로 정리해야 할 것 같다는 생각이 들었다.
1차 전체 완성은 이번주까지라고 생각하고 빠르게 진행해야겠다.
issue를 전반적으로 정리해서 올린 다음 추천 페이지를 만들었는데
들어갈 내용물이 없는 상황이다보니 정말로 허전하게 나와버렸다.
추천 로직도 백엔드에서 정리를 해야 하는데(클라이언트쪽에서 그 많은 데이터에서 검색한다음 찾아올 수는 없으니까) 그 부분이 제대로 작동할지도 모르기 때문에 이 페이지는 2~3차완성 단계에서나 수정될 것 같다.
addfood, fooddetail 부분을 마무리 하고 오늘은 이정도로 정리하기로 했다.
어제 3시가 넘어서 정리한 여파로 전반적으로 피곤하기 때문에 백준 출석문제만 해결한 다음 조금 일찍 자야겠다.
내일은 mypage, find(ID,Password) 두가지를 마무리하고 login, signup을 다시 한번 체크할 예정이다.
CT(1).득수 밥 먹이기는 간단한 dp문제였는데 조건을 좁히면 다음과 같다.
1.첫날은 아무 집에서 먹거나 굶을 수 있다.
2.전날 굶었다면 무조건 식사를 해야 하고 식사를 했다면 굶을 수 있다.
3.오늘 간 식당과 이웃한 식당은 가지 않는다.
즉 이중배열로 0(굶음),1,2,3,4(각 식당 idx)를 기준으로 할 때
각 dp당 전날에 가능했던 위치들의 합을 dp[i]로 만들어주면 되는 문제였다.
이중배열 dp를 만드는 방법도 시도할 때마다 조금씩 개선되고 있는데 생각해보면 push로
dp.push(new Array(5).fill(0))처리를 하기 때문에 i를 1부터 시작하는 등의 조절을 통해 시작값은 dp[[1,1,1,1,1]]같이 원하는 초기값을 할당해줄 수 있었다.
해결 코드는 아래와 같다.
let input = 20000
let dp = [[1,1,1,1,1]]
let result = 0
for(let i = 1 ; i < input ; i++){
dp.push(new Array(5).fill(0))
}
for(let i = 1 ; i < input ; i++){
for(let j = 0 ; j < 5 ; j++){
if(j === 0){
dp[i][j] = (dp[i-1][1] + dp[i-1][2] + dp[i-1][3] + dp[i-1][4])%1000000007
}
else if(j === 1){
dp[i][j] = (dp[i-1][0] + dp[i-1][3] + dp[i-1][4])%1000000007
}
else if(j === 2){
dp[i][j] = (dp[i-1][0] + dp[i-1][4])%1000000007
}
else if(j === 3){
dp[i][j] = (dp[i-1][0] + dp[i-1][1])%1000000007
}
else if(j === 4){
dp[i][j] = (dp[i-1][0] + dp[i-1][1] + dp[i-1][2])%1000000007
}
}
}
for(let i = 0 ; i < 5 ; i++){
result += dp[input-1][i]
}
console.log(result%1000000007)
CT(2).이중우선순위큐라는 문제는 js로는 극악한 난이도일 수 밖에 없는데(class로 직접 다 구현하고 작성해야한다) 2단게에 2점밖에 되지 않아 사람들이 쓴 글을 잘 읽어보니 정렬로도 된다는 말을 듣고 아래와 같이 처리해보니 0.09ms(만분의1초)만에 통과된다.
제한사항으로는 분명 operations는 길이가 1 이상 1,000,000 이하인 문자열 배열입니다.
라는 말이 있기 때문에 이렇게 단순하면 안된다..
할 때마다 정렬을 하고 거기에 unshift까지 사용하기 때문에 시간초과가 너무 당연한 문제인데 테스트케이스 최고 오래 걸린 시간이 0.00022초라는 사실을 보며 조건을 설정했으면 지켰으면 좋겠다는 생각과 2점이라도 얻었다는 만족감이 교차한다.
function solution(operations) {
var answer = [];
for(let i = 0 ; i < operations.length; i++){
let [a,b] = operations[i].split(' ')
if( a === "I"){
answer.push(Number(b))
answer = answer.sort((a,b) => a-b)
}
else if(answer.length === 0){
continue
}
else if(a === "D" && b === "1"){
answer.pop()
}
else{
answer.shift()
}
}
if(answer.length){
return [answer[answer.length-1],answer[0]]
}
else{
return [0,0]
}
}
CT(3).n진수 게임은 걱정보다 단순했는데 진법 변환을 진행한 후 해당 순서마다 문자열을 더해준 결과값을 toUpperCase()로 하면 되는 문제였다. 마지막에 ()를 적지 않아 undefined 출력 때문에 잠깐 당황했지만 바로 해결할 수 있었다.
CT(4).가장 큰 수는 일반적 정렬을 한 후 각 자릿수별로 for문을 통해 해당 자릿수의 시작 숫자보다 낮은 숫자가 중간에 들어갈 경우 뒷순번으로 밀리는 방식으로 복잡하게 시도했으나 장렬하게 폭사하고 이것저것 알아보던 중 sort에 function을 사용할 수 있다는 새로운 방식을 봤다. 일반적으로는 ((a,b)=>a-b)형태로 사용하거나 sort((a, b) => a < b ? -1 : 1)처럼 문자열을 정돈하는 방식 또는 a[idx]-b[idx]형태까지는 경험해봤지만
sort자체 함수는 처음 본 것 같다.
하지만 가능성을 봤을 뿐 sort 내부 화살표함수로도 충분히 작성이 가능한 문제였다.
[3, 30, 34, 5, 9].sort((a,b) => Number(String(b) + String(a))- Number(String(a) + String(b)))
하지만 하나가 자꾸 틀려서 생각해보면 0이 문제였기 때문에 삼항연산자로 0체크를 해줘서 통과할 수 있었다.
function solution(numbers) {
return (Number(numbers.sort((a,b) => Number(String(b) + String(a))- Number(String(a) + String(b))).join('')) === 0 ? "0":numbers.sort((a,b) => Number(String(b) + String(a))- Number(String(a) + String(b))).join(''))
}'회고' 카테고리의 다른 글
| [Main-Project 개발일지]-14 (0) | 2022.09.21 |
|---|---|
| [Main-Project 개발일지]-13 (1) | 2022.09.20 |
| [Main-Project 개발일지]-11(주말) (1) | 2022.09.18 |
| [Main-Project 개발일지]-10(주말) (0) | 2022.09.17 |
| [Main-Project 개발일지]-9 (0) | 2022.09.16 |
