How We Coding

### Codeforces Round #515 (Div. 3)  ###


Problem: http://codeforces.com/contest/1066

Tutorial: http://codeforces.com/blog/entry/62419



A.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <cstdio>
#include <vector>
using namespace std;
 
int main()
{
    int tc;
    scanf("%d"&tc);
 
    while(tc--) {
        int L, v, l, r;
        scanf("%d%d%d%d"&L, &v, &l, &r);
 
        int ans = L/v;
        ans -= r/v;
        ans += (l-1)/v;
        printf("%d\n", ans);
    }
    return 0
}
cs


>> 문제를 이해하기가 어려웠지만, 테케의 힌트를 통해 이해할 수 있었다.

>>  lanterns 이 뭔진 모르겠지만, v 간격으로 있는데, 구간 [L, R] 에 있는 것은 제외해야한다.

>> (전체 갯수) - (R을 포함하는 구간까지의 갯수) + (L-1 을 포함하는 구간까지의 갯수) 가 정답이 된다.



B.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <cstdio>
 
int h[1001];
 
int main()
{
    int n, r;
    scanf("%d%d"&n, &r);
 
    int ans=0;
    for(int i=0; i<n; i++
        scanf("%d", h+i);
    
    // [pos-r+1, pos+r-1]
    int cur = n-r;
    while(n > 0) {
        bool turn=0;
        for(int i=cur; i<n; i++) {
            if(i >= 0 && h[i]) {
                cur = i-r-r+1;
                n = i;
                ans++;
                turn = 1;
                break;
            }
        }
        if(!turn) { ans=-1break; }
        if(cur+<= 0break;
    }
 
    printf("%d\n", ans);
    return 0
}
cs


>> 대회 시간중에는 풀지 못한 문제.

>> 히터를 pos 위치에서 키면 히터가 켜지는 범위는 [pos-r+1, pos+r-1] 이 된다.

>> 여기서 14라인 이후 n은 n번째부터는 확실하게 히터가 켜진 상태라고 정의하였다.

>> 그렇다면 n-1번째까지 켜지게 하기 위해서는 n-r 번째 부터 확인을 해야한다. (15번 라인)

>> 다음으로 i번째 히터를 켰다고 가정하면, i번째 이후로는 모두 히터가 켜져있다고 생각하면 된다. n = i;

>> 현재 i-r+1 번째까지도 히터는 켜져 있는 상태. i-r+1 을 n'이라고 생각하면 n'-r번째. 즉, i-r-r+1 번째에 히터가 있으면 베스트다.

>> 하지만, [i-r-r+1, i-r+1) 구간까지 히터가 없다면, [i-r+1, i) 까지의 히터를 켜서라도 [i-r-r+1, i-r+1) 구간에 히터의 영향을 받게 해야한다.

>> 맨 우측부터, cur+r 까지는 히터의 영향을 받은 구간이므로, 이 값이 0이면 모두 히터의 영향을 받는 상태.



C. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <cstdio>
#include <vector>
#include <map>
using namespace std;
 
int deq[500000];
 
int Min(int a, int b)
{
    return a < b ? a : b;
}
 
int main()
{
    int tc;
    scanf("%d"&tc);
 
    char cmd;
    int id, L, R;
    L = R = 250000;
    map<intint> mii;
 
    while(tc--) {
        scanf(" %c%d"&cmd, &id);
 
        if(cmd == 'L') {
            deq[L] = id;
            mii[id] = L--
        }
        else if(cmd == 'R') {
            deq[++R] = id;
            mii[id] = R;
        }
        else { // '?'
            int idx = mii[id];
            int ans = idx-L-1;
            ans = Min(ans, R-idx);
            printf("%d\n", ans);
        }
    }
    return 0;
}
 
 
cs


>> 덱과 맵을 이용하여 해결했다. 간이덱을 만들긴 했지만, 실질적으로 덱을 위한 배열은 없어도 됐다.

>> 6, 27, 31 라인 삭제 후 32라인을 mii[id] = ++R; 로 수정해도 된다.



D.



E.



F.



'PS > Code Force' 카테고리의 다른 글

Codeforces Round #506 (Div. 3) // rated  (0) 2018.08.30
Codeforces Round #496 (Div. 3)  (0) 2018.08.12
Codeforces Round #498 (Div. 3)  (0) 2018.08.12
Codeforces Round #501 (Div. 3) // Rated  (0) 2018.08.02

### MongoDB 특징 ###


- 관계형 데이터베이스(RDB)는 데이터를 Column과 Row로 표현한다. 각 칼럼은 데이터의 타입을 표현하고, 각 Row는 하나의 레코드(Record)를 의미한다. 

- 반면, MongoDB는 문서형 데이터베이스의 대표적인 케이스로 RDB와는 다른 구조적 특징을 갖는다.


1) Row는 있지만, Column은 없다.

- 정확히는 Row 속에 RDB 에서의 칼럼 역할이 포함되어 있다고 볼 수 있다.

- 문서형 데이터베이스에서 하나의 Row는 데이터 타입과 각 데이터 타입에 부합하는 데이터를 모두 소유한다.

- 이전 RDB에서는 모든 Row가 동일한 칼럼에 종속족이었던 것과는 달리, 문서형 데이터베이스는 각 Row가 서로 다른 칼럼의 종류, 갯수를 소유하는 것이 가능하다.


2) 장점

- 엄격한 구조적 지배에서 벗어나서 확장성이 매우 높다고 볼 수 있다.

- 기존의  RDB는 칼럼이 다른 구조화된 자료구조를 가지는 것이 불가능 했으며, 이를  외래키로 해결하고자 하였다. 

  하지만, 문서형 데이터베이스는 어떠한 데이터타입이라도 수용 가능한 JSON이라는 형태의 구조를 가진다.


3) 

관계형 데이터베이스에서의 테이블 => 컬렉션(Collection)

레코드 => 문서객체(Document) 




### MongoDB 간단 명령어 ###


> cls        # 화면 클리어


> show dbs            # DB 목록 확인

admin   0.000GB

config  0.000GB

local   0.000GB


> use store            # DB 선택 (없는 DB면 새로 생성 후 선택)

switched to db store


> db                   # 현재 선택된 DB 확인

store


> db.createCollection('books');    # Collection 생성

{ "ok" : 1 }


> show collections                 # Collection 리스트 확인

books


> db.books.insert({title:'Book-0', content:'Zero', author:'Hoon'})    # Document 삽입, 컬렉션은 없으면 자동으로 생성

WriteResult({ "nInserted" : 1 })


> db.books.find().pretty()                                            # 도큐먼트 확인.

{

"_id" : ObjectId("5bc562bc5d27acea4455d20a"),

"title" : "Book-0",

"content" : "Zero",

"author" : "Hoon"

}


> db.books.insert([                                                    # 여러개의 도큐먼트 삽입

... {title:'Book_Two', content:'ONE-TWO', autor:'JJo'},

... {title:'Book_Three', content:'TWO-three', quthor:'Yong'},

... {title:'Book_Four', content:'Three-Four', autor:'Hooni', Age:27}

... ])

BulkWriteResult({

"writeErrors" : [ ],

"writeConcernErrors" : [ ],

"nInserted" : 3,

"nUpserted" : 0,

"nMatched" : 0,

"nModified" : 0,

"nRemoved" : 0,

"upserted" : [ ]

})


> db.books.find().pretty()

{

"_id" : ObjectId("5bc562bc5d27acea4455d20a"),

"title" : "Book-0",

"content" : "Zero",

"author" : "Hoon"

}

{

"_id" : ObjectId("5bc563945d27acea4455d20b"),

"title" : "Book_Two",

"content" : "ONE-TWO",

"autor" : "JJo"

}

{

"_id" : ObjectId("5bc563945d27acea4455d20c"),

"title" : "Book_Three",

"content" : "TWO-three",

"quthor" : "Yong"

}

{

"_id" : ObjectId("5bc563945d27acea4455d20d"),

"title" : "Book_Four",

"content" : "Three-Four",

"autor" : "Hooni",

"Age" : 27

}


> db.books.remove({quthor:'Yong'})                            # 도큐먼트 제거

WriteResult({ "nRemoved" : 1 })                               # 제거 성공에 따른 메세지

> db.books.find().pretty()

{

"_id" : ObjectId("5bc562bc5d27acea4455d20a"),

"title" : "Book-0",

"content" : "Zero",

"author" : "Hoon"

}

{

"_id" : ObjectId("5bc563945d27acea4455d20b"),

"title" : "Book_Two",

"content" : "ONE-TWO",

"autor" : "JJo"

}

{

"_id" : ObjectId("5bc563945d27acea4455d20d"),

"title" : "Book_Four",

"content" : "Three-Four",

"autor" : "Hooni",

"Age" : 27

}



> db.books.remove({author:'Yong'})

WriteResult({ "nRemoved" : 0 })                                # 제거 실패시의 메세지



> db.books.update({author:'Hoon'}, {age:25, gender:'male'})            # 업데이트 (replace 개념인듯 하다)

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })


> db.books.find().pretty()

{

"_id" : ObjectId("5bc562bc5d27acea4455d20a"),

"age" : 25,

"gender" : "male"

}

{

"_id" : ObjectId("5bc563945d27acea4455d20b"),

"title" : "Book_Two",

"content" : "ONE-TWO",

"autor" : "JJo"

}

{

"_id" : ObjectId("5bc563945d27acea4455d20d"),

"title" : "Book_Four",

"content" : "Three-Four",

"autor" : "Hooni",

"Age" : 27

}



- 더 많은 내용 참고하기 : https://velopert.com/545



MongoDB 압축파일을 통한 설치


http://uxicode.tistory.com/entry/맥-osx에-mongodb-설치하기

'on Mac' 카테고리의 다른 글

scp 를 이용한 파일 복사  (0) 2018.06.08

- 프로젝트 우클릭 - Run As - Run on Server


>>  컨트롤러가 수행되고 "home"을 넘겨주면, home.jsp (view) 가 실행된다.

Ref : http://nahosung.tistory.com/55


- 톰캣 실행하기

$ sudo /Library/Tomcat/bin/startup.sh


- 톰캣 종료하기

# sudo /Library/Tomcat/bin/shutdown.sh

How JS works

JS/Reference2018. 10. 2. 13:48

1 : https://engineering.huiseoul.com/자바스크립트는-어떻게-작동하는가-엔진-런타임-콜스택-개관-ea47917c8442


2 : https://engineering.huiseoul.com/자바스크립트는-어떻게-작동하는가-v8-엔진의-내부-최적화된-코드를-작성을-위한-다섯-가지-팁-6c6f9832c1d9


3 : https://engineering.huiseoul.com/자바스크립트는-어떻게-작동하는가-메모리-관리-4가지-흔한-메모리-누수-대처법-5b0d217d788d


4 : https://engineering.huiseoul.com/자바스크립트는-어떻게-작동하는가-이벤트-루프와-비동기-프로그래밍의-부상-async-await을-이용한-코딩-팁-다섯-가지-df65ffb4e7e

참고1 : https://meetup.toast.com/posts/89


참고2 : https://vimeo.com/96425312


참고3 : https://stackoverflow.com/questions/10680601/nodejs-event-loop


참고4 : https://johnresig.com/blog/how-javascript-timers-work/


참고 5: https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop


'JS > Reference' 카테고리의 다른 글

[JS] 정규표현식을 이용한 str.replace() / pattern.exec()  (0) 2018.12.26
How to make a Web Crawler in Node.js  (0) 2018.11.24
How JS works  (0) 2018.10.02

### MySQL 을 dmg 파일을 통해 설치한 경우 ###


1. 환경변수 설정 후 실행하기.


$ vi ~/.profile


export PATH=/opt/local/bin:/opt/local/sbin:/usr/local/mysql/bin:$PATH 추가


저장 후 종료


$ source ~/.profile


$ mysql -u root -p


그리고 비밀번호 입력하면 된다.



2. 


그리고 시스템 환경설정에 가면 MySQL 아이콘(?)이 생긴다.

서버 작동 여부, 자동 실행여부를 설정할 수 있다.



참고 : http://jason719.tistory.com/45

[Spring / Error] Server Tomcat v8.5 Server at localhost failed to start.


- 메이븐 디펜던시의 문제였다.


- 메이븐의 디펜던시가 설치되어 있는 폴더로 이동한다.


- 나의 경우는 사용자 폴더의 .m2 폴더에 설치가 되어 있었다.


$ cd


>> 사용자 폴더로 이동한다. (보통은 터미널을 켰을 때의 상태이며, cd ~ 와 같다.)

>> 그 다음  ls -al 로 확인 (숨겨진 폴더)


$ cd .m2


$ ls


>> repository 라는 폴더가 있다. 폴더의 내용을 싹 비우면 된다.


$ rm -rf repository/


>> 그리고 해당 폴더를 다시 만들어 놓는다.


$ mkdir repository.



그리고 이클립스를 보면 Java Resource/Libraries/Maven Dependencies 가 비워지게 된다. (아마 맞을 것이다. 교수님께서 해수지는걸 옆에서 보는 상황이라, 저부분이 비워진 것이 맞을 것이다.)


그 다음, 이클립스를 종료 후 재실행 한다. 그럼 자동을 빌드에 필요한 파일들이 다운받아진다.


그리고 프로젝트 를 실행하면 된다. (Run As > Run On Server)





'Spring' 카테고리의 다른 글

[Spring] Controller 실행하기  (0) 2018.10.09
[Tomcat] 실행하기 on Mac  (0) 2018.10.09
WebFramework dev install  (0) 2018.09.10

WebFramework dev install

Spring2018. 9. 10. 01:46

- jdk 설치 후 환경변수 설정 : http://firerope.tistory.com/8


- How to install Tomcat-8.5.3 on mac : https://ajarpitjainblog.wordpress.com/2016/08/12/how-to-install-tomcat-on-maclinux/


- Tomcat roles : http://elfinlas.tistory.com/369


- alias 설정 : https://okky.kr/article/198492