알고리즘/프로그래머스

[프로그래머스] 숫자 야구

2021. 1. 25. 10:01
728x90
반응형
 

문제 설명

숫자 야구 게임이란 2명이 서로가 생각한 숫자를 맞추는 게임입니다.

각자 서로 다른 1~9까지 3자리 임의의 숫자를 정한 뒤 서로에게 3자리의 숫자를 불러서 결과를 확인합니다. 그리고 그 결과를 토대로 상대가 정한 숫자를 예상한 뒤 맞힙니다.

* 숫자는 맞지만, 위치가 틀렸을 때는 볼

* 숫자와 위치가 모두 맞을 때는 스트라이크

* 숫자와 위치가 모두 틀렸을 때는 아웃

예를 들어, 아래의 경우가 있으면

A : 123

B : 1스트라이크 1볼.

A : 356

B : 1스트라이크 0볼.

A : 327

B : 2스트라이크 0볼.

A : 489

B : 0스트라이크 1볼.

이때 가능한 답은 324와 328 두 가지입니다.

질문한 세 자리의 수, 스트라이크의 수, 볼의 수를 담은 2차원 배열 baseball이 매개변수로 주어질 때, 가능한 답의 개수를 return 하도록 solution 함수를 작성해주세요.

제한 사항

-질문의 수는 1 이상 100 이하의 자연수입니다.

-baseball의 각 행은 [세 자리의 수, 스트라이크의 수, 볼의 수] 를 담고 있습니다.

​

입출력 예

baseball

return

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

2

접근법

문제에서 주어진 숫자는 1~9까지 서로 다른수를 가지는 세 자리 수 입니다. 즉, 만들수 있는 숫자는 189개로 많지 않은 수 입니다. 그래서 만들 수 있는 모든 수의 조합을 만든 뒤, 조건에 맞지 않는 수는 제거하는 방법으로 접근하였습니다. 먼저 itertools에서 permutations를 import하여 1~9까지의 수를 3개 선택하여 조합한 모든 리스트를 생성합니다. 그리고 반복문을 통하여 하나씩 접근을 합니다. 하나씩 접근하여 입력으로 주어진 수와 자리, 숫자 모두 일치할 경우에 strike의 수를 늘리고, 기존에 입력받은 strike와 비교를 하여 같지 않을 경우 모든 수의 조합에서 제거합니다. 만약 같을 경우에는 ball을 찾기 위해 숫자가 같은 모든 경우를 찾습니다. 이때, ball은 숫자만 같아야하기 때문에 즉, 자릿수는 달라야하기 때문에 숫자와 자릿수가 모두 같은 strike를 빼줍니다! 마지막으로 계산한 ball과 입력받은 ball이 같지 않을 경우 모든 수의 조합에서 제거합니다.

​

나의 코드

from itertools import permutations
def solution(baseball):
    all_list = list(permutations([1,2,3,4,5,6,7,8,9],3))
    for item in all_list[:]:
        for baseball_item in baseball:
            baseball_num = [int(i) for i in list(str(baseball_item[0]))]
            strike = 0
            for index in range(len(baseball_num)):
                if baseball_num[index] == item[index]: strike += 1
            if baseball_item[1] != strike: 
                all_list.remove(item)
                break
            ball = len(set(baseball_num)&set(item)) - strike
            if ball != baseball_item[2]:
                all_list.remove(item)
                break
    return len(all_list)
 
반응형

'알고리즘 > 프로그래머스' 카테고리의 다른 글

[프로그래머스] 후보키  (0) 2021.01.25
[프로그래머스] 가장 큰 정사각형 찾기  (0) 2021.01.25
[프로그래머스] 라면공장  (0) 2021.01.25
[프로그래머스] [1차]캐시  (0) 2021.01.25
[프로그래머스] 카펫  (0) 2021.01.25
'알고리즘/프로그래머스' 카테고리의 다른 글
  • [프로그래머스] 후보키
  • [프로그래머스] 가장 큰 정사각형 찾기
  • [프로그래머스] 라면공장
  • [프로그래머스] [1차]캐시
컴공누나
컴공누나
ML 엔지니어 컴공누나입니다:) wodbs9522@gmail.com
컴공누나
컴공누나의 지식 보관소
컴공누나
전체
오늘
어제
  • 분류 전체보기 (267)
    • 컴공누나 소개 (2)
    • 언어 마스터 (4)
      • 파이썬 (4)
    • 알고리즘 (159)
      • 프로그래머스 (120)
      • 백준알고리즘 (39)
      • 알고리즘기초 (0)
    • 인공지능공부 (62)
      • 인공지능기본지식 (6)
      • LLM (3)
      • 인공지능기초수학 (9)
      • 프레임워크 (2)
      • 자연어처리 (16)
      • 컴퓨터비전 (2)
      • 그래프 (24)
      • Prolog (0)
    • 다른 분야 (4)
      • Docker (1)
      • Web (3)
    • 논문 (10)
      • 논문리딩 (6)
      • 게제논문 (4)
    • 꿀팁 (19)
      • 오류 정리 (8)
      • 소소한 팁 (11)

블로그 메뉴

  • 홈
  • 태그
  • 글쓰기
  • 관리

공지사항

인기 글

태그

  • 스탠포드그래프
  • 그래프강의
  • Bert
  • selfattention
  • 자연어처리
  • stanfordgraph
  • nlp
  • 그래프신경망
  • GPT
  • transformer
  • GNN
  • 파이썬
  • 선형대수기초
  • 선형대수
  • 백준
  • stanfordgnn
  • 프로그래머스
  • 그래프
  • cs224w
  • 영상기반상식추론

최근 댓글

최근 글

글쓰기 / 관리자
hELLO · Designed By 정상우.
컴공누나
[프로그래머스] 숫자 야구
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.