티스토리 뷰

문제출처 - https://programmers.co.kr/learn/courses/30/lessons/42841

 

코딩테스트 연습 - 숫자 야구 | 프로그래머스

[[123, 1, 1], [356, 1, 0], [327, 2, 0], [489, 0, 1]] 2

programmers.co.kr

def solution(baseball):
    answer = 0
    
    for i in range(123, 988):
        x = int(str(i)[0])
        y = int(str(i)[1])
        z = int(str(i)[2])
        
        if x == 0 or y == 0 or z == 0: continue
        if x == y or y == z or z == x: continue
            
        for i, (num, s, b) in enumerate(baseball):
            baseX = int(str(num)[0])
            baseY = int(str(num)[1])
            baseZ = int(str(num)[2])
            strike = 0
            ball = 0
            
            if baseX == x: strike += 1
            if baseY == y: strike += 1
            if baseZ == z: strike += 1
            if strike != s: break
            
            if baseY == x or baseZ == x: ball += 1
            if baseX == y or baseZ == y: ball += 1
            if baseX == z or baseY == z: ball += 1
            if ball != b: break
                
            if i == len(baseball) - 1: answer += 1
    
    return answer

설명

  • 123부터 987까지 완전탐색
  • 다시 질문의 수만큼 for문을 돌면서 strike, ball이 몇개인지 카운트하고 질문의 s, b이랑 비교
  • 질문 끝까지 갔을때까지 break가 걸리지 않았으면 정답에 +1
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함