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

Contents of table:


Topic:
계산기 by 문자열

Review:
‘enumerate()’ 함수를 적극적으로 활용함. 개인적으로 func_c의 slicing 아이디어가 좋았다.

문제내용

문자열 형태의 식을 계산하려 합니다. 식은 2개의 자연수와 1개의 연산자(‘+’, ‘-‘, ‘*’ 중 하나)로 이루어져 있습니다. 예를 들어 주어진 식이 “123+12”라면 이를 계산한 결과는 135입니다.

문자열로 이루어진 식을 계산하기 위해 다음과 같이 간단히 프로그램 구조를 작성했습니다.

1단계. 주어진 식에서 연산자의 위치를 찾습니다.
2단계. 연산자의 앞과 뒤에 있는 문자열을 각각 숫자로 변환합니다.
3단계. 주어진 연산자에 맞게 연산을 수행합니다.

문자열 형태의 식 expression이 매개변수로 주어질 때, 식을 계산한 결과를 return 하도록 solution 함수를 작성하려 합니다. 위 구조를 참고하여 코드가 올바르게 동작할 수 있도록 빈칸에 주어진 func_a, func_b, func_c 함수와 매개변수를 알맞게 채워주세요.


매개변수 설명

문자열 형태의 식 expression이 solution 함수의 매개변수로 주어집니다.

  • expression은 연산자 1개와 숫자 2개가 결합한 형태입니다.
    • 연산자는 ‘+’, ‘-‘, ‘*’만 사용됩니다.
    • 숫자는 1 이상 10,000 이하의 자연수입니다.

return 값 설명

expression을 계산한 결과를 return 해주세요.

  • 계산 결과는 문자열로 변환하지 않아도 됩니다.

예시

expression return
“123+12” 135

예시 설명

‘+’를 기준으로 앞의 숫자는 123이고 뒤의 숫자는 12이므로 두 숫자를 더하면 135가 됩니다.

정답코드

1
2
3
4
5
6
7
8
9
10
11
12
13
def func_a(numA, numB, exp): #주어진 문자열에서 사칙연산 기호를 찾아서, 해당 연산실행
if exp == '+':
return numA + numB
elif exp == '-':
return numA - numB
elif exp == '*':
return numA * numB
~~~
~~~python
def func_b(exp): #리스트 변수를 idx 와 val로 나누고, 연산기호의 idx 값을 return
for index, value in enumerate(exp):
if value == '+' or value == '-' or value == '*':
return index
1
2
3
4
def func_c(exp, idx): #주어진 연산자의 앞과 뒤의 문자열을 숫자로 반환 
numA = int(exp[:idx])
numB = int(exp[idx + 1:])
return numA, numB
1
2
3
4
5
def solution(expression):
exp_index = func_b(expression) #연산 기호의 idx 값을 exp_index 변수에 저장
first_num, second_num = func_c(expression, exp_index)
result = func_a(first_num, second_num, expression[exp_index])
return result

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