3 minute read

오늘 배운 것 & 한 것


sport

개구리

방향이 수직, 위치가 격자로 고정된 두 선분간 거리를 효율적으로 구할 수 있어야 풀 수 있다.

그걸 차마 구현할 수 있을거라고 생각을 못해서 모든 선들의 몸통을 포함해서 점으로 만든 다음, 모든 점 집합간 다익스트라를 돌리면 되지 않을까 생각했으나 시간복잡도가 될 수가 없었다. (실패)

트럭

처음엔 그리디로 한 번에 들어갈 수 있는 하중 기준으로 그룹화해서 그룹 길이만 따져서 더하면 되지 않을까 했는데, 앞차가 나갔을 때 뒷차가 들어올 수도 있다는 점을 고려하지 못했다.

한 번에 단위시간만 이동가능하고, 앞 차가 다 나갔을 때 뒷차가 들어올 수 있는지 등등도 계산해야 해서 까다로운데 숫자가 작아서 그냥 시뮬레이션을 돌렸다.

cpp solution</summary>


const int MaxN=1010;
int arr[MaxN];
int bridge[101];
void solve()
{
    // https://www.acmicpc.net/problem/13327
    // https://www.acmicpc.net/problem/13335
    // https://www.acmicpc.net/problem/13332

    // 길이 W, 최대 하중 L, ai 트럭무게, 한번에 단위시간만 이동가능. 
    int N,W,L;
    cin>>N>>W>>L;
    for (int n = 0; n < N; n++)
    {
        cin>>arr[n];
        // 순서를 바꿀 수 없으므로, 그리디로 해도 될거 같다.
        // 그러나 문제는 단위시간만 이동 가능하다는것.
        // 그 부분은 그냥 해당 길이 k 그룹이 다 건너는데 걸리는 시간을 f(k,w)로 계산하면 된다.
        // 길이 1이면 w+1, 2면 w+2, ... k면 w+k일듯.
        // 아니다. 앞 트럭들중 몇이 다 건넜을 때, 하중이 괜찮다면 뒤의 트럭이 바로 들어와야 한다.
        // 
    }
    // 그럼 그냥 시간이 널널하니 다 돌려도 괜찮을 수 있다.

    int t=0;
    int cur=0;
    int curLoad=0;
    while(t<150000){
        t++;
        curLoad-=bridge[0];
        bridge[0]=0;
        if(curLoad+arr[cur]<=L){
            bridge[W]=arr[cur];
            curLoad+=arr[cur];
            cur++;
        } else bridge[W]=0;
        bool left=(bridge[W])*true;
        for (int ww = 0; ww < W; ww++)
        {
            // cout << bridge[ww] << ' ';
            if(bridge[ww]!=0){
                left=true;
            }
            bridge[ww]=bridge[ww+1];
        }
        // cout << endl;
        // cout << t << ' ' << curLoad << ' ' << left << ' ' << cur << ' ' << n << endl;
        if(!left && cur>=N){
            break;
        }
    }
    cout << t << endl;
}

</details>

tags

#sport, #blog

vocabo

elasticsearch 버전 및 elk stack by bitnami 및 logstash가 전부 조금씩 바뀌면서 손을 봐줘야 하게 되었다.

  1. 이전에 하던 대로 elk certified by bitnami를 쓰려 했는데 compute instance에 ssh로 접속하려 하니 passphrase를 적으라는데, 어디서 그걸 찾을 수 있는지 몰라서 한참 찾다가, 다 삭제하고 bitnami 사이트에서 자체 스택 만들기 기능으로 스택을 만들고 나서야 찾을 수 있었다.
  2. elasticsearch 버전이 7.3.2가 되어서 jaso-analyzer 버전 숫자도 그에 맞게 높여줬다. 제대로 작동할지는 모르겠다.
  3. elasticsearch 매핑 부분이 조금 바뀌어서, “logs”인덱스 이름/타입 이름?을 빼주고 나서야 put 요청이 성공했다.
  4. 그랬더니, 이번엔 logstash에서 template file을 못찾는다는 에러가 떴다. 찾아보니 mapping 형식을 json으로 나타낸 것을 의미하는거 같은데, 그걸 왜 또 중복으로 적어야 하나? 버전 차이 때문인가 싶어서 logstash를 업데이트하려고 했는데, checkver부분이 달라져서인지 scoop에서 버전 업데이트가 되지 않고 있었다. 그래서 어쩔 수 없이 그냥 직접 받은 다음 테스트 하기로 했다.

고치니까 데이터가 들어갔다. 근데 너무나 느려서 확인해보니 stdout{} 플러그인 출력때문에 느려서 그걸 지우고 하니 훨씬 빨라졌다. 6. 드디어 데이터를 다 올리고, 서버를 올릴 차례다. 먼저 server에서 deconfig 이후 config 명령으로, 파라미터를 아래와 같이 주어서 세팅을 해야 한다.

npm run config -- --account-id=014553383153 --bucket-name=vocabo-lambda-bucket --function-name=vocaboServer --region=ap-northeast-2

처음에 –region 플래그 없이 했을때 왜 스택이 만들어졌다는데 안뜨지? 했는데 버지니아 북부 (기본 region)에 만들어지고 있었던 거였다. 7. win-package-deploy 명령으로 스택을 만들고 이제 rest api경로에서 테스트해보는데 기본 경로는 forbidden이 뜨고, prod 스테이지 경로는 타임아웃이 뜨길래 왜인가 했는데, lambda 환경 변수 설정이 잘못되어 있었다.

ELASTICSEARCH_URL: http://<userid>:<password>@35.229.203.172:80/elasticsearch/

이렇게 되어있어야 하는데,

ELASTICSEARCH_URL: http://<userid>:<password>@http://35.229.203.172:80/elasticsearch/

이렇게 되어 있었음. 고치니까 prod 스테이지 경로에서 잘 작동이 되는것을 확인할 수 있었다. 그리고 사이트에서도 동작이 되었다. 여전히 영어 검색시 5개만 보여주는걸 고치지 못했지만.

  1. 비용절감을 위해 compute 인스턴스를 멈춘 다음 사이즈 조절을 했는데, bitnami에서 그 정보는 동기화가 안 된다. 그리고, bitnami를 써서 재시작해야 제대로 서비스들이 돌아가는것 같다(확인 필요). 또, ip도 바뀌므로 서버쪽도 재업로드 해야한다.

aws는 학생 크레딧을 년마다 준다는데, 구글은 아직 안 되는 모양이다. 가능하면 elasticsearch만 aws로 옮길 수 있다면 더 이상 gcp를 쓸 이유가 없으므로 그쪽을 고려해보아야겠다.

유저 요청이 있을 때만 서버 서비스 스택을 잠시 만드는 식으로 하면 좋을거 같은데. 상당히 고려할 게 많다.

new tips

-


Tags:

Categories:

Updated:

Comments