최대점수 구하기(DFS) 질문 드립니다.
374
작성한 질문수 1
안녕하세요, 해당 문제를 풀다가 질문 사항이 있어서 질문드립니다.
import sys
sys.stdin = open("C:\\Study\\algorithm\\input.txt", "r")
def DFS(L, sum, time):
global res
if res[0] <= time <= m:
if res[1] < sum:
res[0] = time
res[1] = sum
for i in range(1, n+1):
if time > m:
break
if ch[i] == 0:
ch[i] = 1
DFS(L+1, sum+ls[i-1][0], time+ls[i-1][1])
ch[i] = 0
if __name__ == "__main__":
n, m = map(int, input().split())
ls = []
ch = [0] * (n+1)
res = [0] * 2
for i in range(n):
a, b = map(int, input().split())
ls.append([a, b])
DFS(0, 0, 0)
print(res[1])위 코드를 돌려보면 테스트 케이스 1,2번은 풀어지나 3번부터 timeOut이 뜨네요 (무한 루프가 도는거 같습니다)
이전 문제에서 알려주신 비슷한 방식으로
해당 문제를 1~n까지 DFS(n)전체를 탐색해서 최적의 점수를 도출할려고 했는데, 해당 유형의 문제가 나오면 이러한방식으론 해결이 불가능한걸까요?
답변 1
1
안녕하세요^^
위에 코드는 순열과 같은 코드라 중복확인을 너무 많이 해서 그렇습니다.
즉 1번, 2번, 3번, 4번 문제를 풀 경우 부분집합을 경우는 한 번만 확인하는데 비해 위에 코드는 순열이라 순서가 다르면 다른 경우로 생각하는 코드입니다.
1번, 2번, 3번, 4번 순으로 푼 경우
1번, 2번, 4번, 3번 순으로 푼 경우
1번, 3번, 2번, 4번 순으로 푼 경우 등등 모두를 확인합니다.
즉 4문제를 푼 경우라고 하면{1, 2, 3, 4}라는 부분집합 한 번만 확인해야 할 것을 위에 코드는 4!의 경우를 다 확인하는 코드입니다.
기존에 윈도우 10으로 잘 써왔는데 윈도우 11로 바꾸고 나서 채점이 안됩니다.
1
78
2
스택에서 ')'을 만나는 경우
0
80
3
문제가 어디있나요?
0
67
2
변수 or 함수명
0
62
1
침몰하는 타이타닉 문제 질문입니다
0
59
1
AA.py 책점 에러
0
60
1
오늘 구매했는데 파이썬 자료구조 궁금한거 있으면 답변이 잘 될까요.
0
111
2
5.동전분배하기 문제 밑에코드도 정답이될까요?
0
110
1
아나그램 비교 코드
0
116
2
AA.PY파일 복사 후 채점 진행할때 오류 발생합니다.
0
161
2
문제 링크가있나여?
0
147
2
채점기 Time Limit Exceeded 오류 문의
1
166
2
동적계획법은 사용하는 문제
0
126
2
제 코드 좀 봐주세요
0
148
1
예외가 존재할 가능성?
0
97
1
3번이 안풀립니다
0
95
0
5번 틀림
0
115
0
오류원인?
0
99
0
리스트 선언
0
108
1
침몰하는 타이타닉(그리디) 문제 질문
0
111
1
알고리즘
0
70
1
코딩테스트
0
93
1
DFS 순서 질문드립니다.
0
129
2
left, right를 사용한 풀이법에 대한 질문입니다
0
91
1





