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번을 풀었으면 예비 합격자인듯 하다.