반응형
반응형
https://www.acmicpc.net/problem/2667 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 난이도: solved.ac 실버 1 사용 알고리즘 DFS (BFS도 가능) 접근 방법 DFS와 BFS 알고리즘 기본 문제다 먼저 for문을 이용해 한 칸씩 이동하며 집을 찾아주고, 집을 찾으면 해당 집이 속한 단지를 DFS를 이용해 찾아주었다 이때 집의 개수도 size라는 변수를 통해 세어주었다 그리고 한 단지의 탐색이 끝나면 num이라는 배열에 위에서 구한 size를 저장시켜주었다 이 과정을 반복..
https://www.acmicpc.net/problem/4949 4949번: 균형잡힌 세상 각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에 www.acmicpc.net 난이도: solved.ac 실버 4 분명 맞게 짠 거 같은데 계속 10%에서 틀렸다고 떠서 맞왜틀;;;하면서 굉장히 짜증 났던 문제다...;;ㅋ 근데 진짜 틀린게 맞았음 ㅎ 일단 나는 스택을 이용해 문제를 풀었다 스택의 top을 가리키는 int형 변수 top의 초기값을 -1으로 주고 '(' 나 '[' 가 입력되면 '(' 와 '[' 를 스택에 넣어주고 top을 1 더해주고 ')..
https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net 난이도: solved.ac 실버 3 DFS를 이용하면 쉬운 문제다 (BFS로 풀어도 될 것 같음) 각 컴퓨터끼리의 연결을 그래프로 나타내서 arr라는 2차원 배열에 각 노드의 연결을 나타내주고 visited라는 1차원 배열에 컴퓨터의 방문을 나타내주었다 #define _CRT_SECURE_NO_WARNINGS #include #define MAX 101 int arr[MAX][MAX]; int visi..
https://www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 난이도: solved.ac 실버 1 BFS를 알고 있다면 쉽게 풀 수 있는 문제다 먼저 map에 입력을 받아주고, visited라는 2차원 배열을 통해 해당 index의 위치를 방문했는지 표시하며 이때 표시는 출발 위치로부터 떨어진 거리로 표시한다 문제에서 출발 위치와 도착 위치도 칸을 세야 한다고 했으므로 visited를 1부터 시작했다 Ex. visited[0][0] = 1 visited[0][1] = 2 ... 내가 말을 ..
https://www.acmicpc.net/problem/1913 1913번: 달팽이 N개의 줄에 걸쳐 표를 출력한다. 각 줄에 N개의 자연수를 한 칸씩 띄어서 출력하면 되며, 자릿수를 맞출 필요가 없다. N+1번째 줄에는 입력받은 자연수의 좌표를 나타내는 두 정수를 한 칸 띄어서 www.acmicpc.net 난이도: solved.ac 실버 3 구현은 좀 까다로웠지만 아이디어를 생각해내는 건 어렵지 않았다 내 아이디어는 이렇다 먼저 가장 가운데인 1의 위치를 찾아주었는데 이는 쉽게 계산할 수 있다 N을 2로 나눈 몫이 1의 행, 열의 좌표이다 (index가 0부터 시작한다고 할 때) 그리고 r이라는 변수로 반지름을 나타냈는데 이 또한 N을 2로 나눈 몫이다 여기서 반지름이란 맨 가운데인 1부터 맨 바깥 ..
https://www.acmicpc.net/problem/1780 1780번: 종이의 개수 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수 www.acmicpc.net 난이도: solved.ac 실버 2 재귀를 이용하면 쉽게 풀 수 있다 먼저 시작점 arr[0][0]를 기준으로 find 라는 함수를 불렀다 이때 find 함수는 아래와 같다 int find(int x, int y, int N) { ... } x와 y는 각각 arr의 행, 열을 의미하고 N은 종이의 크기를 나타낸다 find 함수 안에서는 base라는 변수로 arr[x][y]를 기준으로 잡..