From b18ff790bbe50bc417f449a656701dad4584b0ac Mon Sep 17 00:00:00 2001 From: aqswa <69039161+aqswa@users.noreply.github.com> Date: Mon, 4 Oct 2021 02:52:45 +0900 Subject: [PATCH] =?UTF-8?q?[=EB=8F=99=EC=A0=81=EA=B3=84=ED=9A=8D=EB=B2=95]?= =?UTF-8?q?=2010=EC=9B=94=204=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1149.cpp | 38 ++++++++++++++++++ 15486.cpp | 45 +++++++++++++++++++++ 17404.cpp | 51 ++++++++++++++++++++++++ 20923.cpp | 108 +++++++++++++++++++++++++++++++++++++++++++++++++ 3190.cpp | 117 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 359 insertions(+) create mode 100644 1149.cpp create mode 100644 15486.cpp create mode 100644 17404.cpp create mode 100644 20923.cpp create mode 100644 3190.cpp diff --git a/1149.cpp b/1149.cpp new file mode 100644 index 0000000..9c31ab8 --- /dev/null +++ b/1149.cpp @@ -0,0 +1,38 @@ + +#include +#include + +using namespace std; + +int min(int a, int b, int c){ + return b > a ? c > a ? a : c : c > b ? b : c; +} + +int find(vector> dp, vector> cost, int n){ + + dp[0][0] = cost[0][0]; + dp[0][1] = cost[0][1]; + dp[0][2] = cost[0][2]; + + for(int i=1; i> n; + + vector> cost(n, vector(3, 0)); + for(int i=0; i> cost[i][0] >> cost[i][1] >> cost[i][2]; + } + + vector> dp(n, vector(n, 0)); + cout << find(dp, cost, n); + +} diff --git a/15486.cpp b/15486.cpp new file mode 100644 index 0000000..b12d6d9 --- /dev/null +++ b/15486.cpp @@ -0,0 +1,45 @@ + +#include +#include + +using namespace std; + +struct info{ + int d, m; +}; + +int find(vector counsel, int n){ + vector dp(n+1); + + //마지막 날 하루 걸리는 상담일때만 상담함. + if(counsel[n].d == 1) + dp[n] = counsel[n].m; + else + dp[n] = 0; + + for(int i=n-1; i>0; i--){ + if(i+counsel[i].d < n+2) // 상담을 할 수 있다면 + if(i+counsel[i].d < n+1) // 상담 마지막 날 다음 날 dp가 있으면 + dp[i] = max(dp[i+counsel[i].d]+counsel[i].m, dp[i+1]); + else // 상담 마지막 날 다음 날 dp가 없으면 + dp[i] = max(counsel[i].m, dp[i+1]); + else + dp[i] = dp[i+1]; + } + + return dp[1]; +} + +int main(){ + int n; + cin >> n; + + //입력 + vector counsel(n+1); + for(int i=1; i<=n; i++){ + cin >> counsel[i].d >> counsel[i].m; + } + + cout << find(counsel, n); + +} diff --git a/17404.cpp b/17404.cpp new file mode 100644 index 0000000..ac49894 --- /dev/null +++ b/17404.cpp @@ -0,0 +1,51 @@ + +#include +#include + +using namespace std; + +int min(int a, int b, int c){ + return b > a ? c > a ? a : c : c > b ? b : c; +} + +int find(vector> dp, vector> cost, int n){ + + int ans [3]; + for(int i=0; i<3; i++){ + for(int j=0; j<3; j++){ + if(j==i) + dp[0][j] = cost[0][j]; + else + dp[0][j] = 100001; + } + + for(int j=1; j> n; + + vector> cost(n, vector(3, 0)); + for(int i=0; i> cost[i][0] >> cost[i][1] >> cost[i][2]; + } + + vector> dp(n, vector(n, 0)); + cout << find(dp, cost, n); + +} diff --git a/20923.cpp b/20923.cpp new file mode 100644 index 0000000..8e9fb0c --- /dev/null +++ b/20923.cpp @@ -0,0 +1,108 @@ +#include +#include + +using namespace std; + +int main(){ + int n, m; + cin >> n >> m; + + int cnt = 0; + deque dodo; + deque su; + deque do_gr; + deque su_gr; + + //입력 + for(int i=0; i> a >> b; + dodo.push_front(a); + su.push_front(b); + } + + int win = 0; + while(true){ + //도도가 카드 옮김. + do_gr.push_front(dodo.front()); + dodo.pop_front(); + //도도 덱이 비었다면 수가 이김. + if(dodo.empty()){ + win = 1; + break; + } + //도도가 5를 내면 도도가 가져감 + if(do_gr.front() == 5){ + while(!su_gr.empty()){ + dodo.push_back(su_gr.back()); + su_gr.pop_back(); + } + while(!do_gr.empty()){ + dodo.push_back(do_gr.back()); + do_gr.pop_back(); + } + } + //빈 그라운드가 없고 합이 5라면 수가 가져감. + else if(!do_gr.empty() && !su_gr.empty() && do_gr.front() + su_gr.front() == 5){ + while(!do_gr.empty()){ + su.push_back(do_gr.back()); + do_gr.pop_back(); + } + while(!su_gr.empty()){ + su.push_back(su_gr.back()); + su_gr.pop_back(); + } + } + cnt++; + //전체 턴이 끝났다면 종료함. + if(cnt == m) + break; + + //수가 카드 옮김. + su_gr.push_front(su.front()); + su.pop_front(); + //수 덱이 비었다면 도도가 이김. + if(su.empty()){ + win = 2; + break; + } + //수가 5를 내면 도도가 가져감. + if(su_gr.front() == 5){ + while(!su_gr.empty()){ + dodo.push_back(su_gr.back()); + su_gr.pop_back(); + } + while(!do_gr.empty()){ + dodo.push_back(do_gr.back()); + do_gr.pop_back(); + } + } + else if(!do_gr.empty() && !su_gr.empty() && do_gr.front() + su_gr.front() == 5){ + while(!do_gr.empty()){ + su.push_back(do_gr.back()); + do_gr.pop_back(); + } + while(!su_gr.empty()){ + su.push_back(su_gr.back()); + su_gr.pop_back(); + } + } + cnt++; + if(cnt == m) + break; + } + + if(win == 1) + cout << "su"; + else if(win == 2) + cout << "do"; + else{ + if(dodo.size() > su.size()) + cout << "do"; + else if( dodo.size() < su.size()) + cout << "su"; + else + cout << "dosu"; + } + +} diff --git a/3190.cpp b/3190.cpp new file mode 100644 index 0000000..0ba0b72 --- /dev/null +++ b/3190.cpp @@ -0,0 +1,117 @@ +// +// Created by LG on 2021-10-02. +// +#include +#include +#include +#include + +using namespace std; + +struct info{ + int r, c; +}; + +int n; +map change; +info head = {1, 1}; + +//동서남북 방향 전환 함수 +char changeDir(char from, char to){ + if(from == 'E'){ + if(to == 'L') + return 'N'; + else + return 'S'; + } + else if(from == 'W'){ + if(to == 'L') + return 'S'; + else + return 'N'; + } + else if(from == 'S'){ + if(to == 'L') + return 'E'; + else + return 'W'; + } + else{ + if(to == 'L') + return 'W'; + else + return 'E'; + } +} + +//방향에 따라 머리 이동하고 종료 결정 +void moveHead(char &dir, bool &fin, vector> &check, deque &snake, int &cnt){ + //방향 바꿔야 할 초이면 방향을 바꿈 + if(change.find(cnt-1) != change.end()) + dir = changeDir(dir, change[cnt-1]); + + if(dir == 'E') + head.c++; + else if(dir == 'W') + head.c--; + else if(dir == 'S') + head.r++; + else + head.r--; + + //벽이나 몸통에 닿지 않았으면 머리 더함. + if(head.r > 0 && head.r <= n && head.c > 0 && head.c <=n &&!check[head.r][head.c]){ + snake.push_front({head.r, head.c}); + check[head.r][head.c] = true; + //cout << "cnt:" << cnt << ' ' << "r:" << head.r << ' ' << "c:" << head.c << '\n'; + } + else{ + fin = true; + } +} + +int main(){ + int k, l, cnt = 1; + cin >> n >> k; + deque snake; + vector> check(n+1, vector(n+1, false)); + vector> apple(n+1, vector(n+1, false)); + + //사과 위치 입력 + for(int i=1; i<=k; i++){ + int r, c; + cin >> r >> c; + apple[r][c] = true; + } + + //방향 전환 정보 입력 + cin >> l; + for(int i=0; i> sec >> dir; + change.insert(pair(sec, dir)); //!insert(make_pair(sec, dir)); + } + + char dir = 'E'; + snake.push_back({1, 1}); + check[1][1] = true; + bool fin = false; + while(true){ + moveHead(dir, fin, check, snake, cnt); + if(fin) + break; + //사과 먹었는지에 따라 꼬리 없애거나 사과 없앰. + if(!apple[head.r][head.c]){ + info t = snake.back(); + snake.pop_back(); + check[t.r][t.c] = false; + } + else{ + apple[head.r][head.c] = false; + } + cnt++; + } + + cout << cnt; +}