[COS Pro python 1급] 모의고사 4번, 6번, 7번

2023. 3. 7. 23:38자격증/COS Pro 1급 Python

D-11

 

모의고사 4번. 아르바이트, 판매사원

- 클래스 복습

class Rabbit:
	#속성(변수)
    shape=''
    xpos=0
    ypos=0
    
    #행동(메소드)
    def __init__(self,value):      #생성자: 객체생성시 무조건 실행됨.
    	print('탄생')
        self.shape=value
        
    def __del__(self):             #소멸자
     	print("이제",self.shape,'는 자유에요.')
        
    def __add__(self,other):       #객체 사이 덧셈 작업 가능
    	print('객체',self.shape,'와',other.shape,'가 친구가 되었습니다.')
        
    def goto(self,x,y):
    	self.xpos=x
        self.ypos=y
        
rabbit1=Rabbit()   #객체 생성
rabbit1.shape='원'
rabbit1.goto(100,200)


class Houserabbit(Rabbit):
	def eatFeed():
		print('집토끼가 모이를 먹습니다.)
        
hrabbit=Houserabbit()    #서브클래스 객체 생성

 

 

모의고사 6번. 보드게임

A 게임은 4x4 격자 모양의 보드의 가장 왼쪽 위에서 가장 오른쪽 아래로 말을 이동시키면서 각 구역에 있는 코인을 획득하는 게임입니다. 이때, 말은 오른쪽 또는 아래쪽으로만 이동할 수 있습니다.

예를 들어, 보드가 아래와 같다면

아래의 경우가 코인을 최대로 획득할 수 있는 경우이고 이때 획득하는 코인은 38입니다.

각 구역에서 획득할 수 있는 코인 양을 담은 2차원 리스트 board가 매개변수로 주어질 때, 최대로 획득할 수 있는 코인의 양을 return 하도록 solution 함수를 작성했습니다. 그러나, 코드 일부분이 잘못되어있기 때문에, 몇몇 입력에 대해서는 올바르게 동작하지 않습니다. 주어진 코드에서 한 줄만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.

def solution(board):
    coins = [[0 for c in range(4)] for r in range(4)]
    for i in range(4):
        for j in range(4):
            if i == 0 and j == 0:              #첫 칸
                coins[i][j] = board[i][j]
            elif i == 0 and j != 0:            #오른쪽으로 이동
                coins[i][j] = board[i][j] + coins[i][j-1]
            elif i != 0 and j == 0:            #아래로 이동
                coins[i][j] = board[i][j] + coins[i-1][j]
            else:            #마지막은 마지막칸+max(마지막 위, 마지막 왼쪽)
                #coins[i][j] = board[i][j] + max(coins[i][j], coins[i-1][j-1])
                coins[i][j] = board[i][j] + max(coins[i][j-1], coins[i-1][j])
    answer = coins[3][3]
    return answer

# 아래는 테스트케이스 출력을 해보기 위한 코드입니다. 아래에는 잘못된 부분이 없으니 위의 코드만 수정하세요.
board = [[6, 7, 1, 2], [3, 5, 3, 9], [6, 4, 5, 2], [7, 3, 2, 6]]
ret = solution(board)

# [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
print("solution 함수의 반환 값은", ret, "입니다.")

 

모의고사 7번. 카드셔플

1부터 n까지 숫자가 적힌 카드 뭉치를 다음 규칙에 따라 카드 뭉치를 섞었을 때, 아래에서부터 k번째에 있는 카드에 적힌 숫자를 알아내려합니다. 카드 뭉치 가장 아래에는 1이 쓰여있으며, 위로 갈수록 숫자가 커집니다. 카드 뭉치를 섞는 규칙은 다음과 같습니다.

1. 카드 뭉치를 정확히 반으로 나눕니다.
2. 두 개로 나뉜 카드 뭉치를 교차로 섞어서 카드 뭉치 하나를 만듭니다. 이때, 항상 1이 적힌 카드가 있는 뭉치를 아래로 놓고 섞습니다.
3. 위 과정을 반복합니다.

예를 들어, 1부터 6까지 숫자가 적힌 카드 뭉치를 3번 섞는다면 과정별로 아래에서부터 적힌 숫자는 다음과 같습니다.

횟수카드 뭉치

1 [1, 4, 2, 5, 3, 6]
2 [1, 5, 4, 3, 2, 6]
3 [1, 3, 5, 2, 4, 6]

이때, 아래에서 3번째에 있는 카드에 적힌 숫자는 5입니다.

처음에 가장 위에 있는 카드에 적힌 숫자 n, 섞는 횟수 mix, 알고 싶은 카드의 위치 k가 매개변수로 주어질 때, 아래에서부터 k번째에 있는 카드에 적힌 숫자를 return 하도록 solution 함수를 작성했습니다. 그러나, 코드 일부분이 잘못되어있기 때문에, 몇몇 입력에 대해서는 올바르게 동작하지 않습니다. 주어진 코드에서 한 줄만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.

def solution(n, mix, k):
    answer = 0
    card = [_ for _ in range(1, n+1)]
    while mix != 0:
        mix = mix - 1
        card_a, card_b = [0 for _ in range(n//2)], [0 for _ in range(n//2)]
        for i in range(0, n):
            if i < n//2:
                card_a[i] = card[i]
            else:
            	#card_b[i] = card[i]
                card_b[i-n//2] = card[i]
        for i in range(0, n):
            if i % 2 == 0:
                card[i] = card_a[i//2]
            else:
                card[i] = card_b[i//2]
    answer = card[k-1]
    return answer

# 아래는 테스트케이스 출력을 해보기 위한 코드입니다. 아래에는 잘못된 부분이 없으니 위의 코드만 수정하세요.
n = 6
mix = 3
k = 3
ret = solution(n, mix, k)

n//2한 개수만큼 원소가 있는 빈 리스트를 두개만들고 카드를 두 덱으로 나눔.

-> card_a [1, 2, 3], card_b [4, 5, 6] ;첫번째 for문

;문제해설: card_b의[0], [1], [2]==i-n//2에 card의 [3], [4], [5]==i이 들어가야 함.

card의 짝수번째 인덱스에는 card_a의 값이 차례로 들어가고, 홀수번째 인덱스에는 card_b 값이 차례로 들어감.

->card [1, 4, 2, 5, 3, 6] ;두번째 for문

-> 반복.