Challenge
Careers
Class
Connect
로그인 후 문제풀이가 가능합니다.
이거 제 머리가 우동사리인건가요..제발 도와주셈........(2024-11-11 해결안됨)
일단 깊이 재는 데 편하려고 DFS 썼고, 3 초과일때 탐색 빠꾸 먹여서 해봤는데...기본 예제 입력(테케1)만 맞고 다 틀리네요..어떤 부분에서 발상이 잘못된지 알려주세요.. 소스는 다음과 같습니다.. #include<iostream> #include<vector> #include<algorithm> using namespace std; typedef pair<int,int> iter2dim; iter2dim i2dim[4] = { make_pair(-1,0), make_pair( 1,0), make_pair(0,-1), make_pair(0, 1) }; int N; bool avail(int x, int y) { if(x<0 or y<0) return false; if(x>=N or y>=N) return false; return true; } void dfs(int...
이동시간 3초 미만 케이스가 누락된거같습니다.
2 2 10 20 30 40 1 1 2 2 친구1(0초) 10 / 친구2(0초) 40 친구1(1초) 30 / 친구2(1초) 20 정답 100 100이 안나오는 코드도 통과됩니다. 해당 경우의 테스트 케이스가 누락되어있는거같습니다
C언어 소스코드 반례
테스트케이스 3번에서만 오답인데 디버깅이 어렵네요 피드백 부탁드립니다. #include <stdio.h> int n, m; int x[3], y[3]; // 친구들의 시작 위치 int dx[4] = {-1, 1, 0, 0}; // 상, 하, 좌, 우 이동 int dy[4] = {0, 0, -1, 1}; int farm[20][20]; int visited[20][20]; int tmp_visited[20][20]; int max_fruit = 0; // 최대 수확량 int total = 0; // DFS로 3초 동안 수확할 수 있는 최대 열매 수확량 탐색 void DFS(int idx, int x, int y, int time, int collected) { if (time == 3) { if (collected > max_fruit) { max_fruit = collected; memcpy(tmp_visited, visited, sizeof(visited)); } return...
문제 테스트 케이스가 부족합니다.
다른 분이 제기하시기도 하였지만, 문제에 있는 예를 들어서 한 번 더 확인해 보았어요. 노란 친구가 탐색을 한다고 했을 때, 88 + 99 를 한 결과 값이 파란 친구가 지난 길의 열매를 제외하고도 먹어진다면 => 그 다음 칸이 50 보다 크다고 했을 때 (51) 정답은 664가 되어야합니다. 근데 저는 틀릴 줄 알고, 한 번 방문 했던 경로는 다시 방문 못 하도록 설정 해놓고 제출하니까 맞다고 채점되네요..
문제 로직 질문입니다.
이 문제를 bfs로 해결하려면 어떻게 해야할까요? bfs로 접근하려고 하니까 visited 처리는 하면 안될 것 같고, 또 상하좌우에서 열매 크기가 같은 경우가 여러 칸 있는 경우를 다 큐에 넣으면 다른 사람이 해당 칸에 접근하지 못하네요.. 이 문제는 dfs로 접근하는 게 맞는 풀이일까요?
정답 기준을 변경해주세요.
3 1 1 100 1 1 1 1 1 100 1 2 2 위의 테스트 케이스를 실행할 때 201이 정답으로 나와야합니다. (2,2) -> (1,2) -> (2,2) -> (3,2) 의 순서로 이동해야 최대 양의 열매를 수확할 수 있는데 visited 배열을 통해 단순히 도착했던 나무를 방문하지 않는다는 조건으로 문제를 해결하여 103으로 실행결과가 나와도 통과합니다.
파이썬 이렇게 풀면 왜 틀리나요?
from collections import deque n, m = map(int, input().split()) farm = [] for i in range(n): farm.append(list(map(int, input().split()))) positions = [] for i in range(m): x, y = map(int, input().split()) positions.append([x - 1, y - 1]) dx = [-1, 0, 1, 0] dy = [0, 1, 0, -1] seconds = 3 def max_bfs(positions, farm): sec_3 = [] for i in positions: sec_3_i = [] queue = deque() queue.append([i, 0, farm[i[0]][i[1]]]) w...
C언어 코드 어딜 고쳐야 할지 감이 안와요,, 4시간 붙잡고 있었어요,,,
#include <stdio.h> #define MAX_N 10 int N, M; int board[MAX_N][MAX_N]; long long max_harvest = 0; void dfs(int x, int y, int step, long long sum, int visited[MAX_N][MAX_N]) { // 종료 조건: 3번 이동하면 종료 if (step == 3) { printf("%d ",sum); //if(max_harvest > sum) visited[nx][ny]=0; max_harvest = max_harvest > sum ? max_harvest : sum; // 최대값 갱신 return; } // 상하좌우 이동을 모두 시도 int dx[] = {-1, 1, 0, 0}; int dy[] = {0, 0, -1, 1}; for (int d = 0; d < 4; d++) { int nx = x + dx[d]; int ny = y + dy[d]; // 새로운 위치...
테케 3번만 틀림
테스트케이스 3번만 틀렸다고 뜨는데 어떻게 해결해야할까요,,