Python

[실무]프로그래머스 Python3 코딩 기초 트레이닝(1~40문제)

노력하는 백곰 2024. 7. 24. 07:12

■ 출처

- 코딩테스트 : Python3 / 코딩 기초 트레이닝 / 모든 상태 체크 / 1~40문제

https://school.programmers.co.kr/learn/challenges?order=recent&languages=python3&partIds=44139&page=1&statuses=unsolved%2Csolving%2Csolved%2Csolved_with_unlock

 

코딩테스트 연습 | 프로그래머스 스쿨

개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!

school.programmers.co.kr

 

 

■ 연습문제

1. 문자열 출력하기

str = input()
print(str)

 

 

2. a와 b 출력하기

strip() 함수 : 특별한 문자를 제거 또는 문자열 앞뒤의 공백을 제거하는 함수
split() 함수 : 문자열을 특정 구분자를 기준으로 나누는 함수
map() 함수 : 여러 개의 데이터를 받아서 각각의 요소에 함수를 적용한 결과를 반환하는 내장 함수
- 예시, map(①적용할 함수, ②함수를 적용할 데이터 집합)

a, b = map(int, input().strip().split())
print('a =', a)
print('b =', b)

 

 

3. 문자열 반복해서 출력하기

str, n = input().split(' ')
n = int(n)

print(str * n)

 

 

4. 대소문자 바꿔서 출력하기

알파벳 대/소문자 변환
- .upper() 함수 : 소문자 → 대문자 반환하는 함수
- .lower() 함수 : 대문자 → 소문자 반환하는 함수

알파벳 대/소문자인지 여부 반환
- .isupper() 함수 : 대문자 → True 반환하는 함수
- .islower() 함수 : 소문자 → True 반환하는 함수

.join() 함수 : 매개변수로 들어온 리스트에 있는 요소들을 하나의 문자열로 합치는 함수

new_str = []
str = list(input())
for eng_text in str:  
    if eng_text.islower() == True :
        new_str.append(eng_text.upper())
    else :
        new_str.append(eng_text.lower())

print(''.join(new_str))

 

 

5. 특수문자 출력하기

#print('!@#$%^&*(\\\'\"<>?:;')
print(r'!@#$%^&*(\'"<>?:;')

 

 

6. 덧셈식 출력하기

a, b = map(int, input().split(' '))
print(a, '+', b, '=', a+b)

 

 

7. 문자열 붙여서 출력하기

str1, str2 = map(str, input().strip().split(' ')) 
print(str1 + str2)

 

 

8. 문자열 돌리기

str = list(input())
for list_text in str:
    print(list_text)

 

 

9.  홀짝 구분하기

나누셈 연산자 구분 : ①'/'은 기본적인 나눗셈, ②'//'은 나눗셈의 몫, %은 나눗셈의 나머지

n = int(input())

if n % 2 == 0 :
    print(n, 'is even')
elif n % 2 == 1 : 
    print(n, 'is odd')

 

 

10. 문자열 겹쳐쓰기

def solution(my_string, overwrite_string, s):
    if len(my_string[s:]) > len(overwrite_string):
        answer = my_string[0:s] + overwrite_string + my_string[s+len(overwrite_string):]
    else:
        answer = my_string[0:s] + overwrite_string
    return answer

 

 

11. 문자열 섞기

def solution(str1, str2):
    answer = ''
    for i in range(0, len(str1)) : 
        answer += str1[i] + str2[i]
    return answer

 

 

12. 문자 리스트를 문자열로 변환하기

def solution(arr):
    answer = ''
    for i in range(0, len(arr)):
        answer += arr[i]
    return answer

 

 

13. 문자열 곱하기

def solution(my_string, k):
    answer = ''
    answer = str(my_string) * int(k)
    return answer

 

 

14. 더 크게 합치기

def solution(a, b):
    answer = 0
    a_text = int(str(a) + str(b))
    b_text = int(str(b) + str(a))
    if a_text > b_text:
        answer = a_text
    else:
        answer = b_text
    return answer

 

 

15. 두 수의 연산값 비교하기

def solution(a, b):
    answer = 0
    a_text = int(str(a) + str(b))
    b_text = 2 * int(str(b)) * int(str(a))
    if a_text < b_text:
        answer = b_text
    else:
        answer = a_text
    return answer

 

 

16. n의 배수

def solution(num, n):
    answer = 0
    if num % n == 0:
        answer = 1
    else:
        answer = 0
    return answer

 

 

17. 공배수

논리 연산자 구분 : ①is는 '=='로 대체 가능, and은 '&'로 대체 가능, or은 '|'로 대체 가능

def solution(num, n, m):
    answer = 0
    if num % n == 0 and num % m == 0:
        answer = 1
    else:
        answer = 0
    return answer

 

 

18. 홀짝에 따라 다른 값 반환하기

거듭제곱 연산자 : 같은 수를 반복해서 곱하는 것을 의미하며, '**'을 사용

def solution(n):
    answer = 0
    if n % 2 == 1: 
        for i in range(n, 0, -2):
            answer += i
    else:
        for i in range(n, 0, -2):
            answer += (i**2)  
    return answer

 

 

19. 조건 문자열

eval() 함수 : 문자열로 받은 사칙연산 식을 실행하는 함수

'''#내 풀이
def solution(ineq, eq, n, m):
    if eq == "=": 
        if ineq == ">":
            return int(n>=m)
        else:
            return int(n<=m)
    else:
        if ineq == ">":
            return int(n>m)
        else:
            return int(n<m)'''

def solution(ineq, eq, n, m):
    return int(eval(str(n) + ineq + eq.replace('!', '') + str(m)))

 

 

20 flag에 따라 다른 값 반환하기

def solution(a, b, flag):
    answer = 0
    if flag == True:
        answer = a+b
    else:
        answer = a-b
    return answer

 

 

21. 코드 처리하기

def solution(code):
    result = ''
    mode = 0
    for i in range(0, len(code)):
        if mode == 0 : 
            if code[i] != '1' and i % 2 == 0:  
                result += code[i]
            elif code[i] == '1':
                mode = 1
        else :
            if code[i] != '1' and i % 2 == 1 :
                result += code[i]
            elif code[i] == '1':
                mode = 0
    if result == '':
        return 'EMPTY'
    return result

 

 

22. 등차수열의 특정한 항만 더하기

def solution(a, d, included):
    answer = 0
    for i in range(0, len(included)):
        print(a, d, i, int(included[i]))
        answer += (a + d * i) * int(included[i])
    return answer

 

 

23. 주사위 게임 2

def solution(a, b, c):
    answer = 0
    if (a != b) and (a != c) and (b != c):
        answer += a + b + c
    elif (a == b) and (a == c) and (b == c):
        answer += (a + b + c) * (a**2 + b**2 + c**2) * (a**3 + b**3 + c**3)
    else:
        answer += (a + b + c) * (a**2 + b**2 + c**2)
    return answer

 

 

24. 원소들의 곱과 합

def solution(num_list):
    add_num = 0
    mul_num = 1
    for i in range(0, len(num_list)): 
        add_num += num_list[i]
        mul_num *= num_list[i]
    
    if mul_num < add_num**2:
        return 1
    elif mul_num > add_num**2:
        return 0

 

 

25. 이어 붙인 수

def solution(num_list):
    even_list = []
    odd_list = []
    answer = 0
    
    for i in range(0, len(num_list)): 
        if num_list[i] % 2 == 0:
            even_list.append(str(num_list[i]))
        else: 
            odd_list.append(str(num_list[i]))
    answer = int(''.join(even_list)) + int(''.join(odd_list))
    return answer

 

 

26. 마지막 두 원소

def solution(num_list):
    num_anyting = 0
    
    if num_list[-1] > num_list[-2]:
        num_anyting = num_list[-1] - num_list[-2]
    else:
        num_anyting = num_list[-1] * 2
    
    num_list.append(num_anyting)
    return num_list

 

 

27. 수 조작하기 1

def solution(n, control):
    for i in range(0, len(control)):
        if control[i] == 'w':
            n += 1
        elif control[i] == 's':
            n -= 1
        elif control[i] == 'd':
            n += 10
        else: 
            n -= 10
    return n

 

 

28. 수 조작하기 2

def solution(numLog):
    answer = ''
    dic = { 1: "w", -1: "s", 10: "d", -10: "a" }
    
    for idx, val in enumerate(numLog):
        if idx != len(numLog)-1:  # 마지막 배열 값에서 멈추기 위한 조건문
            answer += dic[numLog[idx+1] - numLog[idx]]
    return answer

 

 

29. 수열과 구간 쿼리 3

def solution(arr, queries):
    for i in queries: 
        arr[i[0]], arr[i[1]] = arr[i[1]], arr[i[0]]
    return arr

 

 

30. 수열과 구간 쿼리 2

def solution(arr, queries):
    result = []
    
    for query in queries:
        temp_list = []
        for i in range(query[0], query[1] + 1):
            if arr[i] > query[2]:
                temp_list.append(arr[i])
                
        try:   
            result.append(min(temp_list))
        except:
            result.append(-1)
    
    return result

 

 

31. 수열과 구간 쿼리 4

def solution(arr, queries):
    answer = arr
    
    for x in range(0, len(queries)):
        s = queries[x][0]
        e = queries[x][1]
        k = queries[x][2]
        
        for i in range(s, e+1):
            if i % k == 0:
                answer[i] += 1     
    return answer

 

 

32. 배열 만들기 2

all() 함수 : 반복문으로 순회할 수 있는(iterable) 모든 객체를 인자 대상 참인지 여부를 확인하는 함수

def solution(l, r):
    answer = []
    
    for i in range(l, r+1):
        if all(num in ['0', '5'] for num in str(i)):
            answer.append(i)
    if len(answer) == 0:
        answer.append(-1)

    return answer

 

 

33. 카운트 업

def solution(start_num, end_num):
    answer = []
    for i in range(start_num, end_num+1):
        answer.append(i)
    return answer

 

 

34. 콜라츠 수열 만들기

콜라츠 수열 : 변경된 지난 n 값들을 리스트에 기록하는 것을 의미

def solution(n):
    answer = [n]
    
    while n != 1:
        if n % 2 == 0:
            n = n // 2
            answer.append(n)
            
        else :
            n = 3 * n + 1
            answer.append(n)
            
    return answer

 

 

35. 배열 만들기 4

def solution(arr):
    stk = []
    i = 0
    
    while len(arr) > i:
        
        if len(stk) == 0:
            stk.append(arr[i])
            i += 1
        elif (len(stk) >= 1) and (stk[-1] < arr[i]):
            stk.append(arr[i])
            i += 1
        elif (len(stk) >= 1) and (stk[-1] >= arr[i]):
            del stk[-1]

    return stk

 

 

36. 간단한 논리 연산

논리 연산자 구분 : v (합집합 - | - or), ∧ (교집합 - & - and)

def solution(x1, x2, x3, x4):
    answer = (x1 or x2) and (x3 or x4)
    return answer

 

 

37. 주사위 게임 3

def solution(a, b, c, d):
    #인자 값으로 받는 4개의 눈금 수 리스트화
    dice_list = [a, b, c, d] 
    #set함수를 활용한 중복값 제거
    non_dup_list = list(set(dice_list)) 
    
    #1.(중복 제거 결과 = 1) 4개 눈금 수가 모두 겹치는 상황 / 조건에 맞는 결과 리턴
    if len(non_dup_list) == 1:
        return (1111 * non_dup_list[0])
    
    #2.(중복 제거 결과 = 2) 눈금 수가 3개 겹치거나 2개 겹치는 상황
    elif len(non_dup_list) == 2:      
        for element in dice_list:
            # 2.1.(눈금 수 3개 겹침) 중복을 재거한 리스트를 순회하고 p와 q를 조건에 맞게 할당
            if dice_list.count(element) == 3: 
                p = element
                q = [x for x in non_dup_list if x != p][0]
                return ((10*p+q)**2)
            
            # 2.2.(눈금 수 2개 겹침) 중복을 제거한 리스트를 순회하고 p와 q를 할당
            elif dice_list.count(element) == 2:
                p = element
                q = [x for x in non_dup_list if x != p][0]
                return ((p + q) * (abs(p-q)))
            
    #3.(중복 제거 결과 = 3) 눈금 수가 2개만 겹치는 상황
    elif len(non_dup_list) == 3:
        for element in dice_list:
            if dice_list.count(element) == 2:
                new_list = [x for x in non_dup_list if x != element]
                return (new_list[0] * new_list[1])
    
    #4.(중복 제거 결과의 길이 = 4) 가장 작은 숫자 만큼의 점수를 리턴
    else:  
        return min(dice_list)

 

 

38. 글자 이어 붙여 문자열 만들기

def solution(my_string, index_list):
    answer = []
    for i in range(0, len(index_list)):
        some_number = int(index_list[i])
        some_text = my_string[some_number]
        answer.append(some_text)
    return ''.join(answer)

 

 

39. 9로 나눈 나머지

나누셈 연산자 구분 : ①'/'은 기본적인 나눗셈, ②'//'은 나눗셈의 몫, ③%은 나눗셈의 나머지

def solution(number):
    answer = int(number) % 9
    return answer

 

 

40. 문자열 여러 번 뒤집기

문자열을 거꾸로 출력하는 명령어 : [::-1]
- 예시, s = 'abcde'

               print(s[::-1])  → 'edcba'

def solution(my_string, queries):
    for start, end in queries:
        my_string = my_string[:start] + my_string[start:end+1][::-1] + my_string[end+1:]
    return my_string