본문 바로가기

알고리즘 문제147

[알고리즘 문제] 백준2178 - 미로탐색 https://www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 시작지점에서 도착지점까지 이동하는데 최소이동거리를 구하는 문제이며 전형적인 bfs문제이다. 가로/높이의 크기가 100인데 bfs를 구현하기 위해서는 상/하/좌/우로 검사를 해줘야 한다. 그때 배열을 벗어나는 것을 검새해줘야 하는데, 나는 그냥 가로/높이에 한줄씩 추가해서 배열검사하는 부분을 뺏다. #include #include using namespace std; struct Info { int x; int y; int dep.. 2020. 8. 23.
[알고리즘 문제] 백준14501 - 퇴사 https://www.acmicpc.net/problem/14501 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 개인적으로 이 문제의 핵심은 재귀함수의 for문에서 반복을 시작하는 시점이다. 3일걸리는 일을 선택했다면 현재~3일 사이의 일은 선택할 수 없다. 이 부분을 잘 처리해줘야 한다. 아래의 코드에서 for문의 반복시작점은 day인데, 이는 곧 info의 index값이 된다. 그리고 다음 재귀함수를 돌릴 때 day값에 i + 선택한 작업이 걸린 일수를 넣어줌으로써 일을 처리하는 동안 그사이에 존재하는 다른 일을 선택하지 못하도록 하였다. 처음에 visited배열을 선언해서 선택한 일들에 대한 중복처리를 하였는데 이런 식으로 반복문의 시작점.. 2020. 8. 22.
[알고리즘 문제] 백준2798 - 블랙잭 https://www.acmicpc.net/problem/2798 2798번: 블랙잭 문제 카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽다. 카드의 합이 21을 넘지 않는 한도 내에서, 카드의 합을 최대한 크게 만드는 게임이다. 블랙잭은 카지노마다 다양한 규정이 �� www.acmicpc.net 입력으로 받은 숫자중에서 3개를 뽑아서 그 합이 최대값을 넘지 않는선에서 최대값을 구하는 문제이다. 앞선 문제 난쟁이 문제와 같이 3개의 카드를 뽑는데 재귀를 사용하였다. #include #include #include using namespace std; vector cards; vector temp; int visited[101]; int answer = -1; int M, N; // 카드개수, .. 2020. 8. 22.
[알고리즘 문제] 백준2309 - 일곱 난쟁이 https://www.acmicpc.net/problem/2309 2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net 서로다른 n개 에서 r개를 뽑았을 때 r개의 숫자들의 합이 100이 이면 r개를 출력하는 문제입니다. 이 문제는 재귀를 사용하였습니다. search함수의 for문에서 arr에 있는 값들을 하나씩 temp에 넣으면서 temp의 길이가 7이될때 temp의 원소들의 합이 100이 되는지 검사합니다. 여기서 난쟁이들이 중복되어 들어가는 것을 허용하지 않기 때문에 visited를 사용하여 이미 사용한 난쟁이를 체크.. 2020. 8. 22.