How We Coding

총 4문제 / 3시간


플랫폼 : 프로그래머스


예선은 1800명 정도 응시, 본선은 100여명 정도 선발.


1) 스타트와 링크의 시너지 버전


2) 로어바운드+어퍼바운드를 통한 구간


3) 맵, 비트 DP


4) KMP 실패함수



- 이런적이 없었는데, 다 풀었다.

### 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