제주코딩베이스캠프 Python 75~80제

이하연·2020년 8월 15일
0
post-thumbnail

75번 문제 : 이상한 369

from itertools import product

user_input = '66'
listA = []
listB = []
count = 0

for i in range(1,len(user_input)+1) :
    listA+=list(product([3,6,9],repeat=i))


for i in listA :
    totalStr = ''
    for j in i :
        totalStr+=str(j)
    if int(user_input) >= int(totalStr) :
        count+=1

print(count)

76번 문제 : 안전한 땅

import numpy as np

mineField = [[1,0,0,1,0],
             [0,1,0,0,1],
             [0,0,0,1,0],
             [0,0,0,0,0],
             [0,0,1,0,0]]
fieldSize = 5
fieldFind = 3
sum = 0

mineField = np.array(mineField,int)


for i in range(fieldSize-fieldFind+1) :
    for j in range(fieldSize-fieldFind+1) :
        v = mineField[0+i:3+i,0+j:3+j]

        count = v.sum()

        if sum < count :
            sum = count
print(sum)

77번 문제 : 가장 긴 공통 부분 문자열

A_str = 'CAPCAK'
B_str = 'ACAYKP'


lcs = [[0 for i in range(len(A_str)+1)] for j in range(len(B_str)+1)]

for i in range(1,len(A_str)+1) :
    for j in range(1, len(B_str)+1) :
        if A_str[i-1] == B_str[j-1] :
            lcs[i][j]= lcs[i-1][j-1]+1
        else :
            lcs[i][j]=max(lcs[i][j-1],lcs[i-1][j])

for i in lcs :
    print(i)
출력 :   0  A  C  A  Y  K  P
     0 [0, 0, 0, 0, 0, 0, 0]
     C [0, 0, 1, 1, 1, 1, 1]
     A [0, 1, 1, 2, 2, 2, 2]
     P [0, 1, 1, 2, 2, 2, 3]
     C [0, 1, 2, 2, 2, 2, 3]
     A [0, 1, 2, 3, 3, 3, 3]
     K [0, 1, 2, 3, 3, 4, 4]
      

78번 문제 : 원형 테이블

def roundTable(m,n) :
    foodList = [i for i in range(1,n+1)]
    idx = 0

    while len(foodList) > 2 :
        # 첫번째 음식을 먹음
        foodList.pop(idx)
        # 요소의 삭제와 함께 인덱스 1을 빼주는 게 포인트
        idx+=(m-1)
        if idx > len(foodList) -1 :
            idx -= len(foodList)
            print(idx)
            foodList.pop(idx)
            idx-=1
    return foodList

print(roundTable(3,6))

79번 문제 : 순회하는 리스트

def circuitList(list,n) :
    # 리스트 얕은 복사
    l = list[:]
    for i in range(n) :
        l.insert(0,l[-1])
        del l[-1]
    return l

def distance(a,b) :
    disList = []
    for i in range(len(a)) :
        disList.append(abs(a[i]-b[i]))
    return disList

n = 2
lBefore = [10,20,25,27,34,35,39]
lAfter = circuitList(lBefore,n)
lminus = distance(lBefore,lAfter)

idx = lminus.index(min(lminus))

print("인덱스 : ",idx)
print("값 : " , lBefore[idx],lAfter[idx])

80번 문제 : 순회하는 리스트

from itertools import combinations

inputList = ['ㄱ','ㄴ','ㄷ','ㄹ']

l = list(combinations(inputList,3))
resultList = []

for i in l :
    str = ''
    for j in i :
        str+=j
    resultList.append(str)


print(resultList,len(resultList),sep="\n")

0개의 댓글