Notice
Recent Posts
Recent Comments
Archives
04-26 14:33
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
관리 메뉴

줴림이 공부하줴림

[SWEA] [파이썬 프로그래밍 기초(1) 파이썬의 기본 구조와 기초 문법] 8. 함수 기초 본문

Study/SWEA

[SWEA] [파이썬 프로그래밍 기초(1) 파이썬의 기본 구조와 기초 문법] 8. 함수 기초

줴림 2025. 4. 2. 17:08

이예 아직 홍차는 안 탔지만 어쨌든 문풀은 시작.

 

1. 다음의 결과와 같이 반복문을 이용해 단어의 순서를 거꾸로 해 반환하는 함수를 작성하고 그 함수를 이용해 회문 여부를 판단하는 코드를 작성하십시오.

회문 문제, 이것도 컴프 시간에 했던 것 같은데... 난 여전히 아무것도 모르는 청순한 뇌를 가지고 있지.
하지만 청순한 뇌일수록 스스로 학습한 것은 더 잘 기억하는 법! 간다!!

def check_palindrome(word):
    reword = ''
    for i in word:
        reword = i + reword
        
    if reword == word:
        print(word)
        print("입력하신 단어는 회문(Palindrome)입니다.")
    else:
        print(word)
        print("입력하신 단어는 회문(Palindrome)이 아닙니다.")
        
word = input()
check_palindrome(word)

회문 구하는 방법 여러 가지가 있겠지만, 난 단어 철자를 하나씩 거꾸로 넣어서 비교하는게 제일 간편한 것 같다. 비록 생각하는 데 시간이 걸리기는 했지만...

+) 잠깐 도카 다녀와서 다시 처음부터 풀어봤다. 이번엔 무난하게 pass.

 

2. 다음과 같이 사용자 2명으로부터 가위바위보를 입력 받아 가위바위보 규칙이 정의된 함수를 이용해 승패를 결정하는 코드를 작성하십시오.

def rock_scissor_paper(word1, word2):
    if word1 == word2:
        print("무승부입니다")
    elif word1 == "바위":
        if word2 == "가위":
            print("바위가 이겼습니다!")
        elif word2 == "보":
            print("보가 이겼습니다!")
    elif word1 == "가위":
        if word2 == "바위":
            print("바위가 이겼습니다!")
        elif word2 == "보":
            print("가위가 이겼습니다!")
    elif word1 == "보":
        if word2 == "가위":
            print("가위가 이겼습니다!")
        elif word2 == "바위":
            print("보가 이겼습니다!")

name1 = input()
name2 = input()
word1 = input()
word2 = input()

rock_scissor_paper(word1, word2)

이번엔 무난하게 풀었는데. 이렇게 푸는 걸 원한 게 맞는지는... 그리고 else문 써도 되겠지만, 난 나를 못 믿어서 그냥 elif로 해줬다.

 

3. 소수를 검사하는 함수를 정의하고, 다음의 결과와 같이 사용자가 입력한 숫자가 소수인지를 판단하는 프로그램을 작성하십시오. 소수일 경우 "소수입니다." 출력, 아닐 경우 "소수가 아닙니다." 출력

소수: 1과 자기 자신만 약수로 갖는 수
그러면 어떻게 풀어줘야 할까...

'''
소수: 1과 자기 자신만을 약수로 갖는 수
그럼 1에서 자기 자신까지 그 사이에 있는 수로 나눠도 나머지가 0이 아니겠네?
'''
def prime_test(num):
    if num == 1:
        print("소수가 아닙니다.")
        return 0
    
    for i in range(2, num):
        if (num % i) == 0:
            print("소수가 아닙니다.")
            return 0
        else:
            print("소수입니다.")
            return 0

num = int(input())
prime_test(num)

처음엔 return 안 넣고 그냥 작성했더니 "소수입니다."가 여러 번 나와서 당황;; break를 써야하는 건가 했는데 break를 써도 문제가 풀리진 않을 것 같아서 고민 좀 했다. 이럴 땐 return 넣기. 메모메모

 

4. 다음의 결과와 같이 피보나치 수열의 결과를 생성하는 프로그램을 작성하십시오.

'''
피보나치 수열: 다음 값 = 전 + 현
입력: 리스트 길이
'''

def fibonacci(num):
    res = [0] * num
    res[0] = 1
    for i in range(0, num-1):
        res[i+1] = res[i-1] + res[i]
    
    print(res)

num = int(input())
fibonacci(num)

 

5. 리스트의 항목 중 유일한 값으로만 구성된 리스트를 반환하는 함수를 정의하고 이 함수를 이용해 리스트의 중복 항목을 제거하는 프로그램을 작성하십시오.

def overlap_num(nums):
    tmp = list()
    
    for i in range(0, len(nums)):
        if nums[i] not in tmp:
            tmp.append(nums[i])
        else:
            continue
    print(tmp)
        
nums = [1, 2, 3, 4, 1, 2, 3]
overlap_num(nums)

이렇게 작성했는데 틀렸댄다. test할 때는 괜찮았는데 뭐가 문제지?

왜 틀렸는지 알았다. nums 입력을 [1, 2, 3, 4, 3, 2, 1]인데 [1, 2, 3, 4, 1, 2, 3]으로 작성했다. 하...ㅋㅋㅋ

def overlap_num(nums):
    tmp = []
    for i in nums:
        if i not in tmp:
            tmp.append(i)
    print(tmp)
        
nums = [1, 2, 3, 4, 3, 2, 1]
print(nums)
overlap_num(nums)
def overlap_num(nums):
    tmp = list()
    
    for i in range(0, len(nums)):
        if nums[i] not in tmp:
            tmp.append(nums[i])
        else:
            continue
    print(tmp)
    
nums = [1, 2, 3, 4, 3, 2, 1]
print(nums)
overlap_num(nums)

제출 이렇게 2개 했고 결국 pass 받았다. 하... 아니 입력 리스트 잘못 썼다고 이러기 있냐...ㅋㅋㅋㅋ

 

6. 정렬된 숫자를 가진 리스트에서 특정 숫자를 찾는 함수를 정의하고, 이 함수를 이용해 임의의 숫자의 포함 여부를 출력하는 프로그램을 작성하십시오.

def find_num(nums, a):
    if a in nums:
        print("%d => True" % (a))
    else:
        print("%d => False" % (a))
    
nums = [2, 4, 6, 8, 10]
print(nums)
find_num(nums, 5)
find_num(nums, 10)

 

7. 다음과 같이 팩토리얼을 구하는 함수를 정의해 입력된 숫자에 대한 팩토리얼 값을 구하는 프로그램을 작성하십시오.

def factorial(num):
    res = 1
    for i in range(1, num+1):
        res = res * i
    print(res)
num = int(input())
factorial(num)

이지피지

 

8. 숫자에 대해 제곱을 구하는 함수를 정의하고, 다음과 같이 숫자를 콤마(,)로 구분해 입력하면 정의한 함수를 이용해 제곱 값을 출력하는 프로그램을 작성하십시오.

def square(nums):
    for i in nums:
        print("square(%d) => %d" % (i, i**2))
    
nums = list(map(int, input().split(',')))
square(nums)

 

9. 인자로 전달된 두 개의 문자열 중 길이가 더 긴 문자열을 출력하는 함수를 정의하고 결과를 출력하는 프로그램을 작성하십시오.

def length_comparison(words):
    if len(words[0]) <= len(words[1]):
        print(words[1])
    elif len(words[0]) > len(words[1]):
        print(words[0])

words = list(input().split(','))
length_comparison(words)

또 오답... 어디가 문제인지 하고 봤더니 split할 때 콤마 뒤에 공백 추가 안해줘서 그런 듯

def length_comparison(words):
    if len(words[0]) <= len(words[1]):
        print(words[1])
    elif len(words[0]) > len(words[1]):
        print(words[0])

words = list(input().split(', '))
length_comparison(words)

추측이 맞았다. 공백 넣어주니까 pass 뜸

 

10. 인자로 전달된 숫자를 이용해 카운트다운하는 함수 countdown을 정의하고, 이 함수를 이용하여 countdown(0), countdown(10)을 순서대로 실행하십시오. 0보다 작거나 같은 인자가 전달되었을 경우 "카운트다운을 하려면 0보다 큰 입력이 필요합니다."를 출력하십시오.

차라리 문제에서 함수명을 딱 주니까 오히려 편하다. 함수명 짓는 것도 힘들다고~

def countdown(num):
    if num <= 0:
        print("카운트다운을 하려면 0보다 큰 입력이 필요합니다.")
    else:
        for i in range(num, 0, -1):
            print("%d" % (i))

countdown(0)
countdown(10)

코드 짜다가 갑자기 리스트 거꾸로 돌리는 법 까먹음. 대충 정방향으로 돌리는게 (0, num, 1)이니까  (num, 0, -1) 넣으면 거꾸로 되겠지 하고 풀었다.

 

함수의 기초 연습문제 풀이도 끝!! 계속 하다보니까 점점 python이 손에 익는 느낌이 든다. 오늘 파이썬 프로그래밍 기초(1) 끝내고 운동 갔다와야지. 그리고 기초(2)도 금방 끝낼 수 있을 것처럼 보이니까 오늘은 여기까지 싹 풀고!
내일부터는 OPIc이랑 알고리즘 공부 본격적으로 들어간다. 진짜로...