boj 56

[백준 3055] 탈출

문제설명 https://www.acmicpc.net/problem/3055 3055번: 탈출 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제 www.acmicpc.net 알고리즘 1. 그래프 정보 입력 2. 고슴도치 위치, 홍수 지역 정보 저장 3. 홍수 정보를 통해 1분당 홍수 그래프에 반영 4. 고슴도치 이동 반복 코드 import sys from collections import deque def Input_Data(): R, C = map(int,readl().split()) map_forest = [[0] + list(readl()[:-1]) + [0] if 1

Algorithm 2024.01.31

[백준 7569] 토마토

문제설명 토마토가 상자안에 들어있다 가로M, 세로N, 높이 H로 상자가 주어진다 1은 토마토가 익어있다는 의미이고, -1은 빈 공간이다. 하루마다 익은 토마토를 기점으로 위,아래, 상,하,좌,우가 익는다 모든 토마토가 다 익는데 걸리는 최소한의 기간을 출력시킨다 단, 토마토가 원래 다 익어있는 경우에는 0을 출력하고, 토마토가 다 익지 못하는 경우는 -1을 출력시킨다 알고리즘 1. 입력 정보 받기 2. 그래프의 값이 1인(토마토가 익은경우) queue에 그 좌표값을 넣는다 3. bfs알고리즘을 사용하여 상,하,좌,우, 위, 아래를 모두 확인한다 4. 방문기록을 조회하여 0이 남아있는 경우 -1을 출력하고 그렇지 않은 경우엔 최대값을 출력시킨다 코드 #include #include #include usin..

Algorithm 2022.07.11

[백준 5525] IOIOI

문제설명 알고리즘 1. 입력받기 2. N으로 패턴 만들기 3. 주어진 문자열 S에서 N을 find함수로 찾기 4. 찾을때 마다 결과값 변수 1씩 증가, index를 업데이트 1. 입력받기 2. I를 만날때 마다 바로 뒤에 OI가 있으면 k증가, 문자열 index를 2씩 증가 3. OI가 I이후로 N번 나오면 패턴 매칭이 완료된 것이므로 결과 값 증가 , k 감소 4. 결과값 출력 코드 #include #include using namespace std; int main() { int N, M,cnt=0; cin >> N >> M; string S; cin >> S; /*string val; for (int i = 1; i

Algorithm 2022.07.11

[백준 1992] 쿼드트리

문제설명 알고리즘 1. 그래프 정보 입력 받기 2. 4등분 해서 해당 네모가 모두 같은 값으로 이루어진지 판단 3. 모두 같은 값이면 그 값을 출력하고 종료 4. 모두 같은 값이 아니면 또 4등분 해서 반복 코드 #include #include using namespace std; int graph[65][65]; void cut(int a, int b, int size) { int cnt_0 = 0, cnt_1 = 0; for (int i = a; i < a + size; i++)//모두 1이거나 모두 0 인경우 판단 { for (int j = b; j < b + size; j++) { if (graph[i][j]) cnt_1++; else cnt_0++; } } if (!cnt_0 && cnt_1) ..

Algorithm 2022.07.10

[백준 14503] 로봇 청소기

문제설명 알고리즘 1. 입력 받기 : 그래프 크기, 현재 위치, 방향, 그래프 형태 2. 방향 설계 -> 북 서 남 동 순으로 회전하기 때문에 dx,dy에 전진할때 발생하는 값을 정의해 둔다 3. 왼쪽으로 돌고, 안갔으면 간다. 단 갔으면 왼쪽으로 돈다 4. 4방향 다 돌았는데 갈 수 있는 곳이 없는 경우 그 자리에서 1칸 후진한다 5. 후진하려는데 그 뒤도 막혔으면 종료 코드 1) 시행착오 #include using namespace std; //탐색 int dx[4] = { 0,-1,0,1 }; //d=0 ~ 3일때 x의 이동 값 int dy[4] = {-1,0,1,0 }; //d=0 ~ 3일때 y의 이동 값 //후진 int bx[4] = { 1,0,-1,0 }; //d=0 ~ 3일때 x의 이동 값 ..

Algorithm 2022.07.03

[백준 1946] 신입 사원

문제설명 알고리즘 1. 입력 값 저장 2. 서류 점수 기준으로 오름차순 정렬 3. 서류 1등의 면접 점수를 기준으로 다음 사람들의 면접 점수를 조회해 더 높은 값이 나올때 마다 합격, 및 업데이트 코드 #include #include #include using namespace std; vector grade; int main() { int T, N; cin >> T; while (T) { cin >> N; for (int i = 0; i > x >> y; grade.push_back({x,y}); } sort(grade.begin(), grade.end()); //서류 기준 오름차순 정렬 int cnt = 1;// 1등은 합격 int inte..

Algorithm 2022.06.30

[백준 1107] 리모컨

문제설명 이 문제는 이동할 채널, 고장난 버튼을 입력 받고 채널 100번에서 최소한으로 이동하여 목표 채널에 도달하는 것이다 최소 이동 수를 출력시킨다 알고리즘 1. 입력이 불가능한 숫자 버튼을 배열에 true로 집어 넣는다 (arr[0]~arr[9]까지 중, true이면 그 버튼은 누를 수 없음) 2. N의 값이 100이면 바로 0을 출력 시킨다(버튼을 누를 필요 없음) 3. M의 값이 0이거나 현재 이동하려는 채널의 모든 버튼이 고장 나지 않은 경우 비교가 필요하다->(100번에서 + 또는 -를 이용해 가는데 필요 한 횟수, 숫자의 자리수) => 더 작은 값 출력 4. 가려는 채널의 버튼이 고장난 경우 반복문을 통해서 계산한다 4.1) minus, plus 선언 후, 해당 값이 리모컨으로 만들 수 있..

Algorithm 2022.06.30

[백준 1926] 그림

문제설명 알고리즘 1. 가로 세로 및 그림의 정보 입력 및 저장 2. dfs 알고리즘을 사용하되, 가로세로 연속된 그림의 넓이와 수를 구함 3. 출력 코드 #include #include #include using namespace std; #define MAX 505 int graph[MAX][MAX]; int visited[MAX][MAX]; int max_width, N,M,width; void dfs(int x,int y) { visited[x][y] = true; //방문 width++; //가로 세로 넓이 구함, 단 범위 판단 필수 if (graph[x + 1][y] == 1 && visited[x + 1][y] == 0 && (x+1 < N)) { dfs(x + 1, y); } if (gra..

Algorithm 2022.06.27