본문 바로가기

프로그래밍/10주완성코딩테스트

[C++]2636_치즈 치즈 시간 제한메모리 제한제출정답맞힌 사람정답 비율 1 초 128 MB 17997 9586 6964 52.918% 문제 아래 과 같이 정사각형 칸들로 이루어진 사각형 모양의 판이 있고, 그 위에 얇은 치즈(회색으로 표시된 부분)가 놓여 있다. 판의 가장자리(에서 네모 칸에 X친 부분)에는 치즈가 놓여 있지 않으며 치즈에는 하나 이상의 구멍이 있을 수 있다. 이 치즈를 공기 중에 놓으면 녹게 되는데 공기와 접촉된 칸은 한 시간이 지나면 녹아 없어진다. 치즈의 구멍 속에는 공기가 없지만 구멍을 둘러싼 치즈가 녹아서 구멍이 열리면 구멍 속으로 공기가 들어가게 된다. 의 경우, 치즈의 구멍을 둘러싼 치즈는 녹지 않고 ‘c’로 표시된 부분만 한 시간 후에 녹아 없어져서 와 같이 된다. 원래 치즈 모양 다시 한 시.. 더보기
[C++]14502_연구소 벽 3개를 세울 수 있는 모든 경우에 대해 탐색해서 안전영역의 크기를 비교해서 답을 구한다. 즉, 완전탐색을 이용해야 한다. 64C3 =41664 로 완전탐색을 해도 시간 제한에 괜찮다. 2 0 0 0 1 1 0 0 0 1 0 1 2 0 0 1 1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 다음 입력 예시에서 벽 3개를 세운 경우 2 1 1 1 1 1 0 0 0 1 0 1 2 0 0 1 1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 3개의 벽을 세운 후 바이러스가 퍼진 모습 (요소가 2일 때 마다 dfs 로 감염된 영역을 visit[i][j]=1) 2 1 1 1 .. 더보기
[C++]17298_오큰수 입력 받은 값이 이전에 입력 받은 값보다 클 때가지 오큰수를 구한다. 스택 구조를 이용해 이미 오큰 수가 존재하는 인덱스에는 접근하지 않도록 한다. #include using namespace std; #define MAX 1000005 int n; int arr[MAX],ret[MAX]; stack s; int main() { cin >> n; memset(ret,-1,sizeof(int)*n); for(int i=0;i> arr[i]; while (s.size() && arr[s.top()] < arr[i]) { ret[s.top()] = arr[i]; s.pop(); } s.push(i); } for(int i=0;i=0;i--){ for(int j=i+1;j 더보기
1325_효율적인 해킹 다른 컴퓨터의 신뢰를 받는 컴퓨터들을 해킹할 경우 해킹할 수 있는 컴퓨터 개수등 중 최대값을 구한다. #include using namespace std; #define MAX 10005 int a,b,n,m,mx=0; vector v[MAX]; int visited[MAX],dp[MAX]={0}; int dfs(int cur){ visited[cur]=1; int ret=1; for(int i=0;i>n>>m; while(m--){ cin >> a>>b; v[b].push_back(a); } for(int i=1;i 더보기
1068_트리 루트 노드가 무조건 노드 0 이라고 생각하고 풀었는데 0이 아닐 수도 있다. 트리 는 벡터 배열을 이용해 나타냈다. 노드 i의 자식 노드는 adj[i]에 push한다. #include using namespace std; int ret=0,r,root,n,num; vector adj[100]; void dfs(int here) { int child = 0; for (int i=0;i> n; for (int i = 0; i > num; if(num==-1) root=i; //루트 노드가 0 이 아닐 수 있다. else adj[num].push_back(i); } cin >> r; if (r == root) { cout 더보기
4949_균형잡힌 세상 보호되어 있는 글입니다. 더보기
3474_교수가 된 현우 보호되어 있는 글입니다. 더보기
[C++]10709_기상캐스터 #include using namespace std; int h,w; int ret[105][105]; char ch; int main(void){ cin >> h >> w; //입력받기 for(int i=0;i ch; if(ch=='c') ret[i][j]=0; else ret[i][j]=-1; } } for(int i=0;i 더보기