Gidhub BE Developer

2018 SW 교육 페스티벌 디지털 과거 Code+ 후기

2018-10-03
goodGid

1번

• 문자열 처리 로직이 까다로울 것 같아서 우선 패스했다.

2번

``````#include <string>
#include <vector>
#include <iostream>
#include <sstream>
using namespace std;

int max_arr[9];
int init_arr[9];
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int n;
cin >> n;
for(int i=1; i<=n; i++){
cin >> max_arr[i];
}

for(int i=1; i<=n; i++){
cin >> init_arr[i];
if(max_arr[i] < init_arr[i]){
cout << "-1" << '\n';
return 0;
}
}

int cnt;
cin >> cnt;
int tmp = 0;
while (cnt) {
init_arr[n]++;
cnt--;
tmp++;
if(init_arr[n] > max_arr[n]){
init_arr[n-1]++;
init_arr[n] = 0;
}
}

for(int i=n-1; i>0; i--){
while(init_arr[i] > max_arr[i]){
init_arr[i] -= max_arr[i]+1; //[1]
init_arr[i-1]++;
}
}

for(int i=1; i<=n; i++){
cout << init_arr[i];
}

return 0;
}
``````
• [1] : init_arr[i] -= max_arr[i]+1 가 아닌
init_arr[i] -= max_arr[i]로 해서 잘못된 부분을 찾는데 시간이 걸렸다.

3번

``````#include <queue>
#include <iostream>
#include<cstring>
using namespace std;

int map[51][51];
int dp[51][51];
int n,m;
bool inRange(int x, int y){
if( x >= 0 && x < n && y >= 0 && y < m)
return true;
return false;
}

int main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);

memset(dp,-1,sizeof(dp));

cin >> n >> m;

queue<pair<int,int>> q;
q.push({0,0});
dp[0][0] = 0;

int ans= -1;
while (! q.empty()) {
int x = q.front().first;
int y = q.front().second;
q.pop();

int nx;
int ny;

nx = x + 2;
ny = y + 1;
if(inRange(nx, ny) && dp[nx][ny] == -1){
dp[nx][ny] = dp[x][y] + 1;
ans = ans < dp[nx][ny] ? dp[nx][ny] : ans ;
q.push({nx,ny});
}

nx = x + 1;
ny = y + 2;
if(inRange(nx, ny) && dp[nx][ny] == -1){
dp[nx][ny] = dp[x][y] + 1;
ans = ans < dp[nx][ny] ? dp[nx][ny] : ans ;
q.push({nx,ny});
}

nx = x - 2;
ny = y + 1;
if(inRange(nx, ny) && dp[nx][ny] == -1){
dp[nx][ny] = dp[x][y] + 1;
ans = ans < dp[nx][ny] ? dp[nx][ny] : ans ;
q.push({nx,ny});
}

nx = x - 1;
ny = y + 2;
if(inRange(nx, ny) && dp[nx][ny] == -1){
dp[nx][ny] = dp[x][y] + 1;
ans = ans < dp[nx][ny] ? dp[nx][ny] : ans ;
q.push({nx,ny});
}

nx = x - 2;
ny = y - 1;
if(inRange(nx, ny) && dp[nx][ny] == -1){
dp[nx][ny] = dp[x][y] + 1;
ans = ans < dp[nx][ny] ? dp[nx][ny] : ans ;
q.push({nx,ny});
}

nx = x - 1;
ny = y - 2;
if(inRange(nx, ny) && dp[nx][ny] == -1){
dp[nx][ny] = dp[x][y] + 1;
ans = ans < dp[nx][ny] ? dp[nx][ny] : ans ;
q.push({nx,ny});
}

nx = x + 2;
ny = y - 1;
if(inRange(nx, ny) && dp[nx][ny] == -1){
dp[nx][ny] = dp[x][y] + 1;
ans = ans < dp[nx][ny] ? dp[nx][ny] : ans ;
q.push({nx,ny});
}

nx = x + 1;
ny = y - 2;
if(inRange(nx, ny) && dp[nx][ny] == -1){
dp[nx][ny] = dp[x][y] + 1;
ans = ans < dp[nx][ny] ? dp[nx][ny] : ans ;
q.push({nx,ny});
}

}

for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
if(dp[i][j] == -1){
cout << "F" << ans << endl;
return 0;
}
}
}

cout << "T" << ans << endl;
return 0;
}
``````

4번

``````#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;

int dp[21];
int arr[21];
int target;
int flag;
void dfs(vector<int> v, int st_idx, int cnt, int sum){
int size = (int) v.size();
if( cnt == 3 ){
if( sum == target){
flag = true;
vector<int> tmp;
for(int i=0; i<size; i++){
if(dp[i] == 1)
tmp.push_back(v[i]);
}
cout << tmp[0] << " " << tmp[1] << " " << tmp[2] << '\n';
}
return ;
}

for(int i=st_idx; i < size; i++){
dp[i] = 1;
dfs(v, i+1, cnt+1, sum + v[i]);
dp[i] = 0;
}
}

int main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);

//[1]
int size = 0;
for(int i=0 ; ; i++){
int tmp;
tmp = cin.get();
if( tmp == '\n')
break;
arr[i] = tmp - '0';
size++;
}

vector<int> v;
for(int i=0; i<size; i+=2){
v.push_back(arr[i]);
}

cin >> target;

sort(v.begin(), v.end());

dfs(v, 0, 0, 0);
if(!flag)
cout << "NO" << endl;

return 0;
}
``````
• 입력 N값이 주어지지 않는 상태로 입력을 받아야해서 난감했다.

• cin.get()은 char 형으로 입력을 받아서 ‘0’을 빼줬다.

Review

• 전체적으로 무난했는데 시간 분배와 정확성 있는 코딩을 못했던 점이 아쉽다.

• 그리고 예선전 결과 연락이 왔다.

• (뇌피셜…) 2,3,4번을 풀었으면 합격
나처럼 2,3번을 풀었으면 예비 합격자인듯 하다.