Cos Pro Python 1급 1차 02번 문제풀이

Contents of table:


Topic:
해밍거리 구하기

Review:
주어진 두 개의 문자열 리스트의 길이를 활용하고 인덱스값을 이용해서 두 리스트의 요소
들을 비교할 수 있는가?라는 것을 묻는 문제이다.

문제내용

#문제2
해밍 거리(Hamming distance)란 같은 길이를 가진 두 개의 문자열에서 같은 위치에 있지만 서로 다른 문자의 개수를 뜻합니다. 예를 들어 두 2진수 문자열이 “10010”과 “110”이라면, 먼저 두 문자열의 자릿수를 맞추기 위해 “110”의 앞에 0 두개를 채워 “00110”으로 만들어 줍니다. 두 2진수 문자열은 첫 번째와 세 번째 문자가 서로 다르므로 해밍 거리는 2입니다.

  • 1001 0
  • 0011 0

두 2진수 문자열 binaryA, binaryB의 해밍 거리를 구하려 합니다. 이를 위해 다음과 같이 간단히 프로그램 구조를 작성했습니다

1
2
3
4
1단계. 길이가 더 긴 2진수 문자열의 길이를 구합니다.
2단계. 첫 번째 2진수 문자열의 길이가 더 짧다면 문자열의 앞에 0을 채워넣어 길이를 맞춰줍니다.
3단계. 두 번째 2진수 문자열의 길이가 더 짧다면 문자열의 앞에 0을 채워넣어 길이를 맞춰줍니다.
4단계. 길이가 같은 두 2진수 문자열의 해밍 거리를 구합니다.

두 2진수 문자열 binaryA와 binaryB가 매개변수로 주어질 때, 두 2진수의 해밍 거리를 return 하도록 solution 함수를 작성했습니다. 이때, 위 구조를 참고하여 중복되는 부분은 func_a라는 함수로 작성했습니다. 코드가 올바르게 동작할 수 있도록 빈칸을 알맞게 채워 전체 코드를 완성해주세요.


매개변수 설명

두 2진수 문자열 binaryA와 binaryB가 solution 함수의 매개변수로 주어집니다.

  • binaryA의 길이는 1 이상 10 이하입니다.
  • binaryA는 0 또는 1로만 이루어진 문자열이며, 0으로 시작하지 않습니다.
  • binaryB의 길이는 1 이상 10 이하입니다.
  • binaryB는 0 또는 1로만 이루어진 문자열이며, 0으로 시작하지 않습니다.

return 값 설명

두 2진수 문자열의 해밍 거리를 return 해주세요.


예시

binaryA binaryB return
“10010” “110” 2

예시 설명

두 2진수의 자릿수는 각각 5와 3입니다. 자릿수를 맞추기 위해 “110” 앞에 0 두 개를 채워주면 “00110”이 됩니다. 이제 두 2진수 문자열의 해밍 거리를 구하면 다음과 같습니다.

  • 1001 0
  • 0011 0

위와 같이 첫 번째와 세 번째 문자가 서로 다르므로, 해밍 거리는 2가 됩니다.

정답코드

1
2
3
4
5
6
def func_a(bstr, bstr_len): # 문자열의 부족한 길이만큼의 0문자열을 추가하다
padZero = "" #빈 문자열
padSize = bstr_len - len(bstr) #매개변수로 주어진 문자열과, 주어진 문자열 만큼의 차이
for i in range(padSize): #위의 차이 만큼의 문자열 "0"을 빈 문자열 안에 넣어준다.
padZero += "0"
return padZero + bstr # 변수로 주어진 문자열에, "0"으로 채워진 문자열을 추가한다.
1
2
3
4
5
6
7
8
9
10
11
12
def solution(binaryA, binaryB):
max_length = max(len(binaryA), len(binaryB)) #두 문자열의 길이 중 더 큰 것을 고른다.
if max_length > len(binaryA): #binaryA가 더 작을 경우에, func_a를 이용해서 "0" 문자열을 추가해서 반환해준다.
binaryA = func_a(binaryA, max_length)
if max_length > len(binaryB): #binaryB가 더 작을 경우. 위와동일.
binaryB = fucn_a(binaryB, max_length)

hamming_distance = 0
for i in range(max_length): #두 매개변수의 요소들을 훑기 위한 for문.
if binaryA[i] != binaryB[i]:
hamming_distance += 1 #해밍거리 count
return hamming_distance

Cos Pro Python 1급 1차 01번 문제풀이

Contents of table:


Topic:
배달음식점 주문메뉴 만들기

Description:
파이썬의 전형적인 메뉴판 만들기 문제를, 클래스를 활용해서 작성할 수 있는가를
테스트 하는 문제이다. 해당 문제는 특히 추상클래스에 대한 이해 여부가 포인트이다.
논리구조는 특별할 것이 없다.

문제내용

  • DeliveryStore :

    • DeliveryStore는 배달 음식점의 인터페이스입니다.
    • 배달 음식점은 set_order_list와 get_total_price 함수를 구현해야 합니다.
    • set_order_list 함수는 주문 메뉴의 리스트를 매개변수로 받아 저장합니다.
    • get_total_price 함수는 주문받은 음식 가격의 총합을 return 합니다.
  • Food :

    • Food는 음식을 나타내는 클래스입니다.
    • 음식은 이름(name)과 가격(price)으로 구성되어있습니다.
  • PizzaStore

    • PizzaStore는 피자 배달 전문점을 나타내는 클래스이며 DeliveryStore 인터페이스를 구현합니다.
    • menu_list는 피자 배달 전문점에서 주문 할 수 있는 음식의 리스트를 저장합니다.
    • order_list는 주문 받은 음식들의 이름을 저장합니다.
    • set_order_list 함수는 주문 메뉴를 받아 order_list에 저장합니다.
    • get_total_price 함수는 order_list에 들어있는 음식 가격의 총합을 return 합니다.

주문 메뉴가 들어있는 리스트 order_list가 매개변수로 주어질 때, 주문한 메뉴의 전체 가격을 return 하도록 solution 함수를 작성하려고 합니다. 위의 클래스 구조를 참고하여 주어진 코드의 빈칸을 적절히 채워 전체 코드를 완성해주세요.


  1. 매개변수 설명
    주문 메뉴가 들어있는 리스트 order_list가 solution 함수의 매개변수로 주어집니다.
  • order_list의 길이는 1 이상 5이하입니댜.
  • order_list에는 주문하려는 메뉴의 이름들이 문자열 형태로 들어있습니다.
    • order_list에는 같은 메뉴의 이름이 중복해서 들어있지 않습니다.
  • 메뉴의 이름과 가격은 PizzaStore의 생성자에서 초기화해줍니다.

  1. return 값 설명
    주문한 메뉴의 전체 가격을 return 해주세요.

  1. 예시
order_list return
[“Cheese”, “Pineapple”, “Meatball”] 51600

정답코드


1
from abc import * # 추상클래스 import 
1
2
3
4
5
6
7
8
class DeliveryStore(metaclass=ABCMeta): # 추상클래스에 앞으로 만들 함수목록 지정 
@abstractmethod
def set_order_list(self, order_list):
pass

@abstractmethod
def get_total_price(self):
pass
1
2
3
4
class Food: # name, price 변수를 만들어줄 class 작성
def __init__(self, name, price):
self.name = name
self.price = price
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class PizzaStore(DeliveryStore): # (name, price)가 리스트의 요소로 이루어진 menu_list
def __init__(self):
menu_names = ["Cheese", "Potato", "Shrimp", "Pineapple", "Meatball"]
menu_prices = [11100, 12600, 13300, 21000, 19500];
self.menu_list = []
for i in range(5):
self.menu_list.append(Food(menu_names[i], menu_prices[i]))

self.order_list = []

def set_order_list(self, order_list): # order_list 변수작성
for order in order_list:
self.order_list.append(order)

def get_total_price(self): # menu_list의 name변수와 order_list의 요소를 비교하여 동일 요소일 경우, price 값을 total_price에 누적합 return
total_price = 0
for order in self.order_list:
for menu in self.menu_list:
if order == menu.name:
total_price += menu.price
return total_price
1
2
3
4
5
6
def solution(order_list): #order_list를 넣었을 때, total price가 나올 수 있도록 마무리 
delivery_store = PizzaStore()

delivery_store.set_order_list(order_list)
total_price = delivery_store.get_total_price()
return total_price