백준 2503 숫자야구

나는야 멋쟁이·2023년 1월 16일
0

문제는 두개의 세 자리 숫자를 비교해서 인덱스 번호가 같다면 st+1, 다르면서 숫자는 포함되어있다면 ball+1이 되는 문제.

세 자리만을 비교하는 문제이므로 모든 경우의 수를 다 사용해도 무방하다

코드의 흐름은 대략적으로

  1. permu로 모든 3자리 숫자 조합출력
  2. 하나씩 per에서 꺼내오면서 입력받은 수와 비교 후 st,b 비교
  3. 만약 둘 다 같다면 cnt += 1
  4. lis = [ [123,1,1]...] 이런식임 -> 즉, per와 비교를 위해서는 lis[i][0]로 접근해야함
  5. lis[i][0]를 list화 시켜주면 per와 인덱스 비교가 쉬워짐. -> per = (1,2,3) / l = [3,2,7]

대략 두시간 넘게 걸린듯.. 계속 마무리가 부족하다

n = int(input())
per = list(permutations([1,2,3,4,5,6,7,8,9], 3))
lis = []
cnt = 0

for i in range(n):
    lis.append(input().split(" "))


for p in per:
    flag = 0
    for i in range(n):
        s, b = 0, 0
        number = list(map(int, lis[i][0]))  ##입력받은 숫자 list화
        for j in range(3):
            if p[j] == number[j]:
                s += 1
            else:
                if p[j] in number:      ##숫자는 같지만 인덱스번호가 다르면 ball
                    b += 1
        if lis[i][1] != str(s) or lis[i][2] != str(b):
            flag = 0
            break
        else:
            flag = 1

    if flag == 1:
        cnt += 1
print(cnt)
profile
열심히 개발공부하기

0개의 댓글