파이썬 프로그래밍 테스트1 풀이와 막힌 부분

소리·2023년 10월 7일
0

문제1 : 이름이 tmp인 크기가 0인 리스트 데이터를 만드시오.

< 내 풀이 >

print("1번 답안")
tmp = []
print(tmp)

.
.

문제 2 : data_type 이라는 이름의 데이터형을 판별하는 함수를 작성해 주세요. 이 함수는 하나의 입력을 받아서 데이터형을 알아내야 합니다. Int, float, string, list, dict, tuple 등을 알아야 하며, 만약 list 형 데이터라면 list 형 데이터 안에 있는 각 데이터의 데이터타입도 반환해야 합니다. 아래 실행 예시를 확인해 주세요

[실행예제]

>> data_type(1)
int

>> data_type(5.)
float

>> data_type([2, 3, [2, 3], "Hello"])
list, <int, int, list <int, int>, string>

< 내 풀이 >

exlist = []
def data_type(n):
    if type(n) == type(exlist):
        res2 = []
        for i in n:
            res2.append(type(i))
        return list, res2
    else:
        result2 = type(n)
        return result2

print("2번 답안")
print(data_type([1, 2, 3]))

🤔 풀지 못한 부분 : <class 'list'> 이렇게 나오는데 예제처럼 깔끔하게 class가 삭제되는 방법을 찾지 못했다 ㅠㅜ

.
.

문제 3 : 우리나라와 달리 미국은 간단한 식사만 해도 팁을 주는 문화가 있습니다. 그래서 팁을 계산하는 함수를 만들면 좋겠습니다. 팁은 함수에서 입력 받도록 하죠. 팁을 계산하는 함수는 calc_tips라는 이름으로 하고, 입력은 전체 금액, 팁 비율로 하면 되겠네요. 혹시 사용자가 팁 비율을 입력하지 않으면 디폴트로 10%를 적용하도록 해주세요. 그런데, 1달러 단위로 딱딱 떨어졌으면 좋겠습니다. 동전을 들고 다니는 건 불편하니까요. 그래서 만약 계산했는데, 5.6달러가 나오면 그냥 6달러로, 5.1달러가 나와도 그냥 6달러로 계산하도록 해주세요. 함수의 결과는 return이 아니라 print가 되도록 해주세요.

< 내 풀이 >

from math import ceil
def calc_tips(totalPrice, tipPercnt = 0.1): #팁을 계산하는 함수
    tipPrice = ceil(totalPrice * tipPercnt)

    print(f'팁 가격 : {tipPrice}달러')

print("3번 답안")
calc_tips(6.1, 0.3)

.
.

문제 4 : 여러 문장으로 된 문서를 입력받아서 매칭되는 문자열의 횟수와 해당 문자열의 위치(index)를 알려주는 search_target이라는 이름의 함수를 작성해주세요.

[실행예제]

예)
>> sentence = "Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex."
>> target = "than"
>> search_target(sentence, target)
3, [20, 50, 82]

< 내 풀이 >

def search_target(sentence, target):
    if target in sentence:
        cnt = sentence.count(target) #문자열 횟수 코드

        result4 = []

        for i in range(cnt):
            if i == 0:
                a = sentence.index(target) 
                print(a, sentence[a])
                result4.append(a)

            else:
                a = sentence.index(target, a+1) #여기서 index 함수에 추가 인자를 넣는게 포인트
                print(a, sentence[a])
                result4.append(a)


    return cnt, result4



print("4번 답안")

sentence = "Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex."
target = "than"

print(search_target(sentence, target))

🤔 처음에 답이 제대로 나오지 않았다. 계속 첫 than의 위치인 20만 나오고 그 다음이 안 나온다. 슬라이싱 부분만 열심히 건드리다가 index()함수에 시작점을 설정할 수 있다는 걸 찾고 적용하니 문제 해결!
.
.

문제5 : 여러분들은 div_ab라는 이름의 함수를 하나 만들어 주세요. 이 함수는 입력 인자로 a, b를 받으며, 받은 인자의 첫 번째를 a, 두 번째를 b라고 합니다. 이 함수는 입력 인자가 꼭 정수여야 하며, 함수 코드 내부에서 정수인지 아닌지를 판별하도록 해서 정수일 때만 나눗셈을 수행하도록 해주세요. 함수의 출력(return)은 없고, 함수의 마지막에 print 문으로 a / b를 계산하는 나눗셈의 결과를 출력하는 함수입니다. 출력의 형태는 정확하게는 몫과 나머지를 구하는 함수입니다. 출력의 첫 번째 항은 몫, 두 번째 항은 나머지가 되도록 코드를 작성해 주세요. 여러분에게 한 가지 안타까운 소식은 div_ab라는 함수를 만들 때 나눗셈 기호( / )나 어떤 모듈이든 나눗셈을 직접 수행하는 명령을 사용할 순 없습니다. 나눗셈 명령 없이 나눗셈을 수행해 주세요.

[실행예제]

예)
>> div_ab(3, 2)
3나누기 2의 결과 : 몫 1, 나머지 1

< 내 풀이 >

def div_ab(a,b):
    if int(a) == a and int(b) == b:
        for i in range(1,a):
            multB = b * i
            if multB > a:
                quotient = (i - 1)
                break
            else:
                continue

        remainder = a - quotient * b

    print(f'3 나누기 2의 결과 : 몫 {quotient}, 나머지{remainder}')

print("5번 답안")
a = 3
b = 2
div_ab(a, b)

.
.

문제 6 :
하노이탑 문제가 있습니다. 아래 첨부된 사진의 글자가 흐릿하지만 신경쓰지 않아도 됩니다. 아래 그림을 설명해 보겠습니다. 크기 순으로 쌓여있는 원반 세 개가 있습니다. 이 원반은 A, B, C 장소 중 현재는 A에 있습니다. 하노이 탑 문제는 작은 원반 위에 큰 원반이 올려질 수 없다는 것과 한 번에 하나만 옮길 수 있다는 것을 지켜야 합니다. A에서 C로 갑자기 건너가는 것은 괜찮습니다.
여러분은 Python으로 아래 그림에 묘사된 하노이 탑 문제를 풀어야 합니다. 여러분의 문제는 하노이탑 원반의 개수는 n개입니다. 이 n개의 원반을 B 지점 혹은 C 지점으로 옮길 수 있어야 합니다. 즉, 하노이탑 문제를 풀 여러분이 작성해 주어야할 함수는 원반의 개수(n)와 어디서 원반이 시작하고(start_point) 어디 옮기는지(end_point)를 입력받아야 합니다. 여러분이 만들어야하는 코드의 출력은 원반을 어디서 어디로 옮긴다는 메시지가 나타나면 됩니다. 위 그림을 예로 들면, 함수의 이름이 hanoi_sol이라면 위 그림의 상황은 Hanoi_sol(3, A, B)라고 입력해야 하고,

그 출력은 print 문으로

A -> B
A -> C
B -> C
A -> B
C -> A
C -> B
A -> B

라고 화면에 출력되면 됩니다. 꼭 장소는 알파벳이어야 하며, 위 결과처럼 표기되어야 합니다.

< 내 풀이 >

def hanoi_sol(n, start, end, via):
    if n == 1:
        print(f'{start} -> {end}')

    else:
        hanoi_sol(n -1, start, via, end) #재귀로 계속 들어가서 1까지 도달

        print(f'{start} -> {end}')

        hanoi_sol(n-1, via, end, start)


print("6번 답안")
hanoi_sol(3, 'A', 'B', 'C')

🤔 via값을 입력하지 않은 상황에서 풀라는 말이었던 것 같기도 한데, 그렇게 푸는 건 시도로 종료,,

<최종 Output>

테스트 풀면서 새로 알게 된 내용 (링크)

list.index(element, start, end)
- element : 반환할 요소
- start (optional) : 검색이 시작되는 위치
- end (optional) : 검색이 끝나는 위치

- 반환 : 요소가 가장 낮은 인덱스 반환
profile
데이터로 경로를 탐색합니다.

0개의 댓글

관련 채용 정보