PS/Baekjoon Online Judge 586

[백준 2630] 색종이 만들기 [C]

풀이 입력받은 N을 이용해 정사각형을 분할하면서 전부다 1 또는 0일때까지 탐색을 하면 된다. 소스코드 #include int paper[128][128], w, b; void color(int x, int y, int n){ int cnt = 0; for (int i = x; i < x+n; i++) for (int j = y; j < y+n; j++) paper[i][j] && cnt++; if (cnt == n*n)b++; else if (!cnt) w++; else { color(x, y, n/2); color(x, y+n/2, n/2); color(x+n/2, y, n/2); color(x+n/2, y+n/2, n/2); } } int main(){ int N; scanf("%d", &N); f..

[백준 1541] 잃어버린 괄호 [C]

풀이 숫자가 아닐 때까지 숫자로 변환해 temp에 저장하다가 부호를 만나면 sum에 저장했다. 처음에 숫자가 입력되므로 양수이기 때문에 '-'일 때, sub[0]에 저장을 해주고 sub[1] 이후로는 빼줄 수를 저장했다. 소스코드 #include #include #include int main() { char str[51]; scanf("%s", str); int len = strlen(str), sub[25] = {0,}, cnt = 0, sum = 0, temp = 0; for (int i = 0; i

[백준 2606] 바이러스 [C]

풀이 입력받은 컴퓨터 쌍을 서로 접근할 수 있도록 반대 쌍 또한 값을 설정해주었다. 그리고, 이전에 접속한 컴퓨터에서의 탐색(중복)을 막기 위해 컴퓨터 번호에 해당하는 num배열의 값을 증가시켰다. 소스코드 #include int arr[100][100], num[100], N, cnt; void dfs(int worm){ cnt++, num[worm] = 1; for (int i = 0; i < N; i++) if (arr[worm][i] && !num[i]) dfs(i); return; } int main(){ int line, x, y; scanf("%d %d", &N, &line); for (int i = 0; i < line; i++){ scanf("%d %d", &x, &y); arr[x-1]..

[백준 2003] 수들의 합 2 [C]

풀이 start, end로 배열의 index를 조작하여 합을 구하다가 M 이상일 때는 start가 가르키는 값을 빼고, start를 증가시킨다. M 미만일 때는 end가 가르키는 값을 더하고, end를 증가시킨다. 위 과정을 거친 후 sum이 M과 동일할 때, cnt를 증가시킨다. 소스코드 #include int main(){ int N, M; scanf("%d %d", &N, &M); int arr[N]; for (int i = 0; i < N; i++) scanf("%d", &arr[i]); int start = 0, end = 0, sum = 0, cnt = 0; while (end