[Python] 17281번

체인지영·2021년 3월 24일
0

[Python] 백준

목록 보기
1/12

내가 생각한 풀이

  1. 가능한 모든 경우를 순열을 이용해 구해야 한다.(itertools 모듈이용)
from itertools import permutations
from itertools import combinations

items=[1,2,3,4]
list(combinations(items,2))
# items의 원소들을 2개씩 조합(서로다른 item 중에 2개를 선택하는 경우의 수(순서상관 없음 )

list(permutations(items,2))
#items 의 원소들을 2개씩 순열(서로다른 item 중에 2개를 선택하는 경우의수 (순서상관 있음))
  1. 이때 1번타자는 반드시 4번째 여야 하므로 리스트 슬라이싱을 통해 1번타자를 제외한 타자들의 순열을 구한후 1번타자를 insert를 이용해 넣어준다

  2. permutations를 이용해 9타자들의 모든 순서에 대해 점수를 다른 리스트로 받는다.

  3. 그 리스트의 원소들중 최대값을 출력한다.

import sys
from itertools import permutations

N = int(sys.stdin.readline())
answer =0
def baseball(l, ctn,score):
    for i in l:
        if i ==0:
            ctn += 1
        else:
            score += i 
        if ctn ==3:
            return score//4
    baseball(l,ctn,score)

answer_list=[]
for _ in range(N):
    R = list(map(int,sys.stdin.readline().split()))
    R_1 = R[1:9]
    print(R_1)
    per_R = list(permutations(R_1,8))
    for ele_R in per_R:
        ele_R.insert(3,R[0])
        answer += baseball(per_R,0,0)
        answer_list.append(answer)
    
# 000 끊기고 다음 이닝으로 넘어가는 부분 ...ㅠ

<배운점>
1. (0,) 이걸 1차원 튜플로 선언한다. (0) 이아니다
2. global 변수 : 이는 함수 내부에서 선언했다 하더라도 외부에서 사용가능하다.
3. 파이썬으로 비트연산자 이용

>>> 0b0011 << 2    # 비트를 왼쪽으로 2번 이동
12
>>> bin(12)
'0b1100'
>>> 0b1100 >> 2    # 비트를 오른쪽으로 2번 이동
3
>>> bin(3)
'0b11'

이문제는 1루타, 2루타, 3루타, 홈런, 아웃 각각의 경우를 조건을 걸어서 다 각각처리해줘야하는 문제이다.

profile
Startup, FrontEnd, BlockChain Developer

0개의 댓글