Challenge
Careers
Class
Connect
로그인 후 문제풀이가 가능합니다.
[함께하는 효도] 문제 수정 공지
안녕하세요, Softeer 담당자입니다. 본 '함께하는 효도' 문제와 관련하여, 지문의 일부를 수정하고 테스트케이스를 추가하였으니 문제를 다시 확인해주시면 감사드리겠습니다. 감사합니다. Softeer 담당자 드림
지문에 혼동의 여지가 있습니다
'이동 경로가 겹치는 것은 불가능합니다.' 라고 써있는데 이걸 '한번 누군가가 이동한 경로로는 다시는 갈수 없다' 라고 해석해야 하는지, '같은 위치에 동시에 두사람이상 존재하면 안된다'로 해석해야 하는지가 분명하지 않습니다. 그리고 문제를 풀어본 결과 첫번째 해석으로 보는게 맞는거 같은데 그렇다면 왜 '한 나무에 여러 친구가 방문하게 되더라도 열매는 딱 한 번만 수확이 가능합니다' 라는 문구가 있는걸까요? 어차피 한나무에 방문할 일이 없으니까 이 문구가 의미가 없어지는건데 보통 의미없는 문구를 써놓지는 않으니까 첫번째 해석이라고 볼 개연성이 떨어집니다.
이거 제 머리가 우동사리인건가요..제발 도와주셈........(2025-1-7 해결안됨)
+추가 조건 고려해서 푸니까 더 안되네요. 보통 이 정도는 다 푼다는 이유로 아무도 답장 안해주시네요..야속해라 #include<iostream> #include<vector> #include<algorithm> using namespace std; constexpr int CNT = 3; // 3초 동안 이동 typedef pair<int, int> iter2dim; vector<vector<int>> farm; vector<vector<int>> visited; iter2dim i2dim[4] = { make_pair(-1, 0), make_pair(1, 0), make_pair(0, -1), make_pair(0, 1) }; int N, M; bool avail(int x, int y) { if (x < 0 or y < 0) return false; if (x >= N or y >= N...
이동시간 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]; // 새로운 위치...