TIL 2019-10-01
오늘 배운 것 & 한 것
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가 전부 조금씩 바뀌면서 손을 봐줘야 하게 되었다.
- 이전에 하던 대로 elk certified by bitnami를 쓰려 했는데 compute instance에 ssh로 접속하려 하니 passphrase를 적으라는데, 어디서 그걸 찾을 수 있는지 몰라서 한참 찾다가, 다 삭제하고 bitnami 사이트에서 자체 스택 만들기 기능으로 스택을 만들고 나서야 찾을 수 있었다.
- elasticsearch 버전이 7.3.2가 되어서 jaso-analyzer 버전 숫자도 그에 맞게 높여줬다. 제대로 작동할지는 모르겠다.
- elasticsearch 매핑 부분이 조금 바뀌어서, “logs”인덱스 이름/타입 이름?을 빼주고 나서야 put 요청이 성공했다.
- 그랬더니, 이번엔 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개만 보여주는걸 고치지 못했지만.
- 비용절감을 위해 compute 인스턴스를 멈춘 다음 사이즈 조절을 했는데, bitnami에서 그 정보는 동기화가 안 된다. 그리고, bitnami를 써서 재시작해야 제대로 서비스들이 돌아가는것 같다(확인 필요). 또, ip도 바뀌므로 서버쪽도 재업로드 해야한다.
aws는 학생 크레딧을 년마다 준다는데, 구글은 아직 안 되는 모양이다. 가능하면 elasticsearch만 aws로 옮길 수 있다면 더 이상 gcp를 쓸 이유가 없으므로 그쪽을 고려해보아야겠다.
유저 요청이 있을 때만 서버 서비스 스택을 잠시 만드는 식으로 하면 좋을거 같은데. 상당히 고려할 게 많다.
new tips
-
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;
}
npm run config -- --account-id=014553383153 --bucket-name=vocabo-lambda-bucket --function-name=vocaboServer --region=ap-northeast-2
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/
Comments