inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

2주만에 통과하는 알고리즘 코딩테스트 (2024년)

안녕하세요 완전탐색 2503번 풀이 질문 드립니다

해결된 질문

622

녜힁

작성한 질문수 6

1

3일 째 스스로 숙제라고 말씀하신 부분에 대해서 코드 작성하면서 제출해보는데 계속 오답이 나와서 질문 드립니다. 구글에 풀이 검색하면 Permutation이나 DFS로만 풀이가 나와서 어떻게 코드를 작성해야 할까요?

python 코딩-테스트 알고리즘

답변 1

0

코딩 센세

안녕하세요!

 

3일 째 스스로 숙제가 어느 부분을 말씀하시는 것 인지 모르겠습니다..

 

제 강의에서 다루는 숫자야구의 2가지 풀이법을 올려두겠습니다 :)

 

참고해서 정답 비교해보시고, 그래도 어려우시면 제출하신 코드를 여기에 올려주세요!

 

  1. 완전탐색(브루트포스)

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)
  1. 재귀(백트래킹)

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