안녕하세요 완전탐색 2503번 풀이 질문 드립니다
3일 째 스스로 숙제라고 말씀하신 부분에 대해서 코드 작성하면서 제출해보는데 계속 오답이 나와서 질문 드립니다. 구글에 풀이 검색하면 Permutation이나 DFS로만 풀이가 나와서 어떻게 코드를 작성해야 할까요?
답변 1
0
안녕하세요!
3일 째 스스로 숙제가 어느 부분을 말씀하시는 것 인지 모르겠습니다..
제 강의에서 다루는 숫자야구의 2가지 풀이법을 올려두겠습니다 :)
참고해서 정답 비교해보시고, 그래도 어려우시면 제출하신 코드를 여기에 올려주세요!
완전탐색(브루트포스)
n = int(input())
numbers = [list(map(str,input().split())) for _ in range(n)]
# string을 미리 넣어준 이유는, 나중에 쪼개기 위해서
answer = 0
# (1) 세 자리 숫자 만들기
for a in range(1,10): # 100의 자리수
for b in range(1,10): # 10의 자리수
for c in range(1,10): # 1의 자리수
counter = 0
# (2) 다른 세 자리수
if( a == b or b == c or c == a):
continue
# continue, 그 숫자를 넘김
# break, 반복문을 넘김
# (3) 배열에 넣은 조건을 넣어주기
for array in numbers:
check = list(array[0]) # ['1','2','3']
strike = int(array[1])
ball = int(array[2])
strike_count = 0
ball_count = 0
#스트라이크 계산기
if (a == int(check[0])):
strike_count += 1
if (b == int(check[1])):
strike_count += 1
if (c == int(check[2])):
strike_count += 1
#볼 계산기
if (a == int(check[1]) or a == int(check[2])):
ball_count += 1
if (b == int(check[0]) or b == int(check[2])):
ball_count += 1
if (c == int(check[0]) or c == int(check[1])):
ball_count += 1
#(4) 매칭 여부 확인하기
if (strike != strike_count):
break
if (ball != ball_count):
break
counter += 1
if counter == n:
answer += 1
print(answer)재귀(백트래킹)
import sys
sys.setrecursionlimit(9999999)
def checker(idx,number):
_number = hint[idx][0]
_strike = hint[idx][1]
_ball = hint[idx][2]
strike = 0
ball = 0
_A = _number // 100
_B = (_number - (_A * 100)) // 10
_C = _number % 10
A = number // 100
B = (number - (A * 100)) // 10
C = number % 10
if A == 0 or B == 0 or C == 0:
return False
if A == B or A == C or B == C:
return False
if A == _A:
strike+= 1
if B == _B:
strike+= 1
if C == _C:
strike+= 1
if A == _B or A == _C:
ball += 1
if B == _A or B == _C:
ball += 1
if C == _A or C == _B:
ball += 1
if strike == _strike and ball == _ball:
return True
return False
def recur(idx, number):
global answer
if idx == n:
answer += 1
# print(number)
recur(0, number+1)
return
if number == 1000:
return
if checker(idx,number):
recur(idx+1, number)
else:
recur(0, number+1)
n = int(input())
hint = [list(map(int,input().split())) for _ in range(n)]
answer = 0
recur(0, 100)
print(answer)
dp[x]가 최대값이라고 확신할수 있는 이유
0
44
1
1090번 문제 질문
0
150
1
유니온파인드
0
112
1
투포인터 25:15 질문
1
128
1
#1090번 문제 반례가 궁금합니다.
0
148
1
예제코드 자바입니다
1
186
1
정수론 파트 #2247 문제에 대한 질문입니다!
0
102
0
코드 오류
0
185
1
2강 정수론 문제3 #1407 질문
0
126
0
이차원 배열 (int형)dp로 0 혹은 -1로 체크하는 방법 말고 boolean형 배열로 체크해서 바로 리턴해줄 수 없나요?
0
154
0
1717번 최적화
0
112
0
백준 22988 문제 질문
1
193
2
[Python] 백준 1090번 문제
1
226
3
강의자료에서
1
162
2
2503 문제 제한 조건 질문!
1
249
2
백준 22988 번 문제
1
193
1
추가 강의 순서
1
180
2
(*문제 풀이)1090 테스트케이스 1번 C++
1
221
2
7강 RGB 색칠하기 질문 있습니다.
1
160
2
정수론 약수 빠르게 구하기 질문
1
257
1
1090 문제의 2, 3번째 아이디어는 결국 같은거 아닌가요?
1
373
2
1090 문제 관련하여 맨해튼 거리 최솟값에 대해 질문 있습니다.
1
223
2
누적합 문제 3번 질문
1
216
2
기억 ( 누적합 ) 강의 11660 문제
1
163
2





