오늘은 백엔드측에서 modify를 수정하고 배포했다는 연락이 먼저 와서 확인해봤다.
일단 postman으로도 접속이 되지 않아 물어보니 서버는 켜지 않았다는 것 같은데 무슨 jar?같은 뭔가가 필요한 것 같다.
신기하게 데이터베이스 올리는 분과 aws 관리하시는 분, 그리고 접속가능하게 서버를 동작시키는 세가지 작업을 모두 다른분이 관리하시고 한분이 통합해서 하지를 못하시는 것 같은데 시간이 좀 지난 뒤 배포된 서버를 접속 가능하게 해주시는 분이 와서 테스트를 해봤다.
여전히 다른 동작들 (create, read, delete)는 작동하지만 update부분은 제대로 되지 않았다.
코드를 비교해보고자 해도 주소값이나 데이터값들은 다 정상적인 것을 확인했고
양식 또한 이미 json과 소통이 완료된 상태에서 주소만 변경했기 때문에 문제가 생길 여지는 없었다.
아무래도 배포할 때 데이터 저장이 문제가 있는 것으로 보이는데
그렇게 생각하는 가장 큰 이유는 postman으로는 수정이 전에도 됬고 지금도 되는데
백엔드분이 보시고 그부분의 문제가 있을 것 같다고 언급을 해주셨기 때문이다.
아마 서버에서 받은 부분을 데이터저장소에도 수정을 요청해야 하는 것 같은데
그 부분이 부족하지 않았을까?

지금 서버를 열어주시는 분은 회원가입/로그인을 담당하시기 떄문에 결국 미해결로 종료되고
회원가입 부분을 조금 수정하고 계신데 서버측은 저장소? 데이터?가 통합되지 않아 현재 서버를 종료하고 회원가입이 구현된 서버를 다시 불러와야해서 시간이 좀 걸린다고 하셨다.

.env / react-dotenv 이부분을 활용해 http로 서버를 열 수 있다는 스터디분의 말씀을 듣고 물어봤더니 역시나 S3로 배포하셨다.
아마 S3로 배포하면 http로 배포가 가능하다는 말은 이전부터 들었기 때문에 굳이 저 방법을 사용하지 않아도 될 것 같기는 했다.
하지만 AWS에서 제공하는 http로 선택하기 대신 직접 클라이언트를 조작해서 http로 변경했다는 부분에 대해서는 대단하다고 생각한다.




CT(1).1, 2, 3 더하기 4라는 문제는 dp를 이용해 일정한 규칙을 받아 dp[n]값을 출력하는 방식으로 해결했다.


CT(2).n^2 배열 자르기는 x1,y1 x2,y2의 좌표를 특정한 후 이중for문으로 하나씩 내용물을 추가해줬지만 오답이 좀 나왔다.
while과 이중for문의 차이점이 뭔지는 잘 모르겠다... 일단 해결 코드는 아래와 같다.

function solution(n, left, right) {
    var answer = [];
    let a1 = Math.floor(left/n)  //x1좌표
    let a2 = left % n //y1좌표
    let b1 = Math.floor(right/n) //x2좌표
    let b2 = right % n //y2좌표
    
    while(a2 !== b2 || a1 !== b1){ //while문으로 처리
        answer.push(Math.max(a1+1,a2+1)) // 좌표값 중 큰 것 +1(idx는 0부터 시작)
        if(a2 === n-1){ //a2(y좌표)가 한계치(idx기준)일 경우 a1을 올려주고 a2 초기화
            a1++
            a2 = 0
        }
        else{ //한계가 아닌 경우 a2만 추가
            a2++
        }
    }
    answer.push(Math.max(a1+1,a2+1)) //이걸 b+1로 처리할까도 싶지만 b2값이 한계치인 경우 넘어가버리기 때문에 무한루프에 빠져 이렇게 빼버렸다.
    
    // for(let i = a1 ; i <= b1 ; i++){ // 위와 같지만 2중 for문으로 처리했다.
    //     for(let j = 0 ; j < n ; j++){
    //         if(i === a1){
    //             if(j >= a2){
    //                 answer.push(Math.max(i+1,j+1))
    //             }
    //         }
    //         else if(i === b1){
    //             if(j <= b2){
    //                 answer.push(Math.max(i+1,j+1))
    //             }
    //         }
    //         else{
    //             answer.push(Math.max(i+1,j+1))
    //         }
    //     }
    // }
    
    return answer;
}




CT(3).기능개발이라는 문제는 while문을 사용해서 해결했지만 중간에 오류가 자주 나왔다.
while내부에 for문과 if문들을 사용할 경우에는 주의해야 할 것 같고 다행히 console이 아니라 무한로딩에 걸리지는 않았지만(프로그래머스는 10초 지나면 자동으로 정지) while, for문은 무한루프에 빠지지 않게 조건들을 잘 살펴보고 완료 후 작동을 해야 할 것 같다.
while문으로 배열에 남은 조건이 없을 때 까지 돌린 후 내부는 arr[0]이 100인지를 체크해 그 뒤로 100인 값들을 순차적으로 제거한 새로운 배열을 만든 후 기존 배열과의 길이차이를 answer에 push해주고 기존 배열에 새로운 배열을 대입시키는 방식으로 처리했다.
물론 100이 아닌 경우는 작업속도에 따라 완성도를 변환시키는 절차가 돌아간다.


CT(4).폰켓몬은 가능한 최대 가짓수를 n/2 아래에서 고르는 값이었기 때문에 Math.min과 new Set을 사용해 중복을 없애는 방식으로 해결했다.


CT(5).소수 찾기는 아래 코드와 같은 방식으로 해결했다. undefined가 많이 뜨는 부분은 아쉽지만 더 다듬을 필요성은 없기 때문에 그냥 제출했다.

function solution(n) {
    var answer = 0;
    let dp = [0,0]
    for(let i = 2 ; i <= n ; i++){
        dp[i] = i
    }
    for(let i = 2 ; i <=n ; i++){
        if(dp[i] !== 0){
            answer++
            let now = i
            while(now < n ){
                now += i
                dp[now] = 0
            }
        }
    }
    
    return answer;
}




CT(6).k진수에서 소수 개수 구하기는 간단하게 에라토스테네스의 체 알고리즘을 재사용(바로 위에서 풀었다)하려고 했으나 문제는 잘 해결되었지만 1,11번 테스트케이스에서 오류가 나버렸다.. 알고보니 100만밖에 되지 않는 숫자라 방심했는데 2진법으로 하게 되면 1024x1024로 약 2의20제곱의 근사치가 나와서 a*10^20까지 숫자가 올라가버릴 수 있었다.
경단위를 훌쩍 뛰어넘어 런타임 에러가 난 것이었다.

다시 이전에 배웠던 제곱근을 이용한 소수판별을 이용해 구해놨던 값들이 소수인지를 판별 후 count에 더해 해결할 수 있었다.

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

[Main-Project 개발일지]-6  (0) 2022.09.13
[Main-Project 개발일지]-5(추석)  (0) 2022.09.12
[Main-Project 개발일지]-3(추석)  (0) 2022.09.10
[Main-Project 개발일지]-2(추석)  (1) 2022.09.09
[Main-Project 개발일지]-1  (0) 2022.09.08

+ Recent posts