■ 출처
- 코딩테스트 : Python3 / 코딩 기초 트레이닝 / 모든 상태 체크 / 41~80문제
■ 연습문제
41. 배열 만들기 5
def solution(intStrs, k, s, l):
answer = []
for i in intStrs:
if int(i[s:s+l]) > k:
answer.append(int(i[s:s+l]))
return answer
42. 부분 문자열 이어 붙여 문자열 만들기
def solution(my_strings, parts):
answer = []
for i in range(0, len(my_strings)):
some_tex = my_strings[i][parts[i][0]:parts[i][1]+1]
answer.append(some_tex)
return ''.join(answer)
43. 문자열의 뒤의 n글자
def solution(my_string, n):
answer = my_string[-n:]
return answer
44. 접미사 배열
.sort() 함수 : 기존 리스트를 정렬(내림차순 정렬 'reverse=True')
sorted() 함수 : 새로운 리스트를 정렬
def solution(my_string):
answer = []
for i in range(0, len(my_string)):
answer.append(my_string[i:])
answer.sort()
return answer
45. 접미사인지 확인하기
def solution(my_string, is_suffix):
answer = []
for i in range(0, len(my_string)):
if my_string[i:] == is_suffix:
return 1
return 0
46. 문자열의 앞의 n글자
def solution(my_string, n):
answer = my_string[:n]
return answer
47. 접두사인지 확인하기
def solution(my_string, is_prefix):
answer = 0
tmp = []
for i in range(0, len(my_string)):
tmp.append(my_string[:i])
#tmp = [my_string[:i] for i in range(0, len(my_string))]
for i in tmp:
if is_prefix == i:
answer = 1
return answer
48. 문자열 뒤집기
def solution(my_string, s, e):
#뒤집을 문자 선택
answer = ''
need_cha_tex = my_string[s:e+1]
#문자 뒤집기
chan_tex = ''
for i in need_cha_tex:
chan_tex = i + chan_tex
answer = my_string[:s] + chan_tex + my_string[e+1:]
return answer
49. 세로 읽기
def solution(my_string, m, c):
answer = ''
temp_list = []
for i in range(0, len(my_string)//m):
temp_list.append(list(my_string[i*m:i*m+m]))
for i in temp_list:
answer += i[c-1]
return answer
50. qr code
def solution(q, r, code):
some_text = ''
some_list = []
for i in range(0, len(code)):
some_text = i % q
if some_text == r:
some_list.append(code[i])
answer = ''.join(some_list)
return answer
51. 문자 개수 세기
아스키코드(ASCII)를 활용한 알파벳 리스트 생성 방법
- 예시, '[chr(code) for code in range(95, 123)]'
def solution(my_string):
answer = [0] * 52
chars = { "A": 0, "B": 1, "C": 2, "D": 3, "E": 4, "F": 5, "G": 6, "H": 7, "I": 8, "J": 9,
"K": 10, "L": 11, "M": 12, "N": 13, "O": 14, "P": 15, "Q": 16, "R": 17, "S": 18,
"T": 19, "U": 20, "V": 21, "W": 22, "X": 23, "Y": 24, "Z": 25, "a": 26, "b": 27,
"c": 28, "d": 29, "e": 30, "f": 31, "g": 32, "h": 33, "i": 34, "j": 35, "k": 36,
"l": 37, "m": 38, "n": 39, "o": 40, "p": 41, "q": 42, "r": 43, "s": 44, "t": 45,
"u": 46, "v": 47, "w": 48, "x": 49, "y": 50, "z": 51 }
for i in my_string:
cnt = my_string.count(i)
#알파벳별 인덱스 위치를 활용한 개수 세기
answer[chars[i]] = cnt
return answer
52. 배열 만들기 1
.sort() 함수 : 기존 리스트를 정렬(내림차순 정렬 'reverse=True')
def solution(n, k):
answer = []
for i in range(1, n+1):
if i % k == 0:
answer.append(i)
#answer.sort(reverse=True) #(기존 리스트)내림차순 정렬
answer.sort() #(기존 리스트)오름차순 정렬
return answer
53. 글자 지우기
#my_string에서 특정 인덱스(indices)에 위치한 텍스트를 제외하고 출력
def solution(my_string, indices):
answer = ''
for i in range(0, len(my_string)):
if i not in indices:
answer += my_string[i]
return answer
54. 카운트 다운
def solution(start_num, end_num):
answer = []
for i in range(start_num, end_num-1, -1):
answer.append(i)
return answer
55. 가까운 1 찾기
def solution(arr, idx):
answer = 0
temp = []
for i in range(idx, len(arr)):
if arr[i] == 1:
temp.append(i)
if len(temp) == 0 :
answer = -1
else :
answer = min(temp)
return answer
56. 리스트 자르기
def solution(n, slicer, num_list):
answer = []
if n == 1:
#'b' 인덱스까지 표기해야하고 0부터 시작하는 인덱스 환경을 고려했을 때 '+1' 추가 적용 必
answer = num_list[0:slicer[1]+1]
elif n == 2:
answer = num_list[slicer[0]:]
elif n == 3:
answer = num_list[slicer[0]:slicer[1]+1]
else:
answer = num_list[slicer[0]:slicer[1]+1:slicer[2]]
return answer
57. 첫 번째로 나오는 음수
def solution(num_list):
answer = 0
for i in range(0, len(num_list)):
if num_list[i] < 0:
return num_list.index(num_list[i])
return -1
58. 배열 만들기 3
def solution(arr, intervals):
a1, b1 = intervals[0]
a2, b2 = intervals[1]
return arr[a1:b1+1] + arr[a2:b2+1]
59. 2의 영역
def solution(arr):
#배열 내 '2'가 존재하지 않을 경우 '[-1]' 출력
if 2 not in arr:
return [-1]
#(배열 내 '2'가 존재하는 경우) 배열 내 마지막 '2' 위치까지 출력
#배열 내 '2' 마지막 위치는 '전체 배열 길이'에서 '마지막 등장한 2 위치'를 빼면 출력 가능
return arr[arr.index(2) : len(arr) - arr[::-1].index(2)]
60. 배열 조각하기
def solution(arr, query):
for idx, query in enumerate(query):
if idx % 2 == 1: #홀수 인덱스, 앞부분 제거하여 출력
arr = arr[query:]
elif idx % 2 == 0: #짝수 인덱스, 뒷부분 제거하여 출력
arr = arr[:query+1]
return arr
61. n 번째 원소부터
def solution(num_list, n):
answer = num_list[n-1:]
return answer
62. 순서 바꾸기
def solution(num_list, n):
# 예시, [1, 6, 2] = [1, 6] + [2]
answer = num_list[n:] + num_list[:n]
return answer
63. 왼쪽 오른쪽
def solution(str_list):
answer = []
for i in range(0, len(str_list)):
#'l'이 먼저나오면 문자열을 기준으로 왼쪽 문자 출력
if str_list[i] == 'l':
return str_list[:i]
#'r'이 먼저나오면 문자열을 기준으로 오른쪽 문자 출력
elif str_list[i] == 'r':
return str_list[i+1:]
return answer
64. n 번째 원소까지
def solution(num_list, n):
answer = num_list[:n]
return answer
65. n개 간격의 원소들
def solution(num_list, n):
answer = []
for i in range(0, len(num_list), n):
answer.append(num_list[i])
return answer
66. 홀수 vs 짝수
def solution(num_list):
#짝수합의 값과 홀수합의 값 중에서 높은 값을 반환
answer = max(sum(num_list[0::2]), sum(num_list[1::2]))
return answer
67. 5명씩
def solution(names):
return names[::5]
68. 할 일 목록
def solution(todo_list, finished):
answer = []
for i in range(0, len(finished)):
if finished[i] == True:
pass
elif finished[i] == False:
answer.append(todo_list[i])
return answer
69. n보다 커질 때까지 더하기
def solution(numbers, n):
answer = 0
for i in range(0, len(numbers)):
answer += numbers[i]
if answer > n:
return answer
70. 수열과 구간 쿼리 1
enumerate() 함수 : 반복문(for 등)에서 순서와 요소 값을 동시에 반환받을 때 사용하는 함수
def solution(arr, queries):
for idx, value in enumerate(queries):
#queries 2차원 배열에서 1개씩 가져와 각각의 인덱스에 해당하는 arr값을 누적'+1' 처리
for i in range(value[0], value[1]+1):
arr[i] += 1
return arr
71. 조건에 맞게 수열 변환하기 1
def solution(arr):
answer = []
for i in range(0, len(arr)):
if (arr[i] >= 50) and (arr[i]%2 == 0): #50보다 크거나 같고 짝수 값
answer.append(arr[i]/2)
elif (arr[i] < 50) and (arr[i]%2 != 0): #50보다 작고 홀수 값
answer.append(arr[i]*2)
else: #그외 값(50보다 작고 짝수 값 등)
answer.append(arr[i])
return answer
72. 조건에 맞게 수열 변환하기 2
.copy() 함수 : 얕은 수준의 복사 함수로써, 원본 객체의 참조(메모리 주소)만 복사(즉, 원본 객체 값이 변경되면 영향 받음)
.deepcopy() 함수 : 깊은 수준의 복사 함수로써, 원본 객체를 완전히 복사(즉, 원본 객체의 값이 변경되어도 영향 안받음)
def solution(arr):
count = -1 #반복 횟수 초기값
raw = arr.copy() #원본 결과와 변화된 결과를 비교하는 것이므로 얕은 복사함수 활용
while 1:
raw = arr.copy()
for i in range(0, len(arr)):
if (arr[i] >= 50) and (arr[i]%2 == 0):
arr[i] = arr[i]//2
elif (arr[i]<=50) and (arr[i]%2 == 1):
arr[i] = (arr[i]*2)+1
count += 1 #반복 횟수 카운트
# 이전 배열과 변환 배열의 모든 요소들이 같은지 비교,
a = 0
for j in range(0, len(arr)):
if arr[j] == raw[j]:
a += 1
if len(arr) == a:
return count # 변환횟수 return
73. 1로 만들기
def solution(num_list):
count = 0
for i in range(0, len(num_list)):
while num_list[i] != 1:
if num_list[i]%2 == 0:
num_list[i] = num_list[i]/2
count += 1
elif num_list[i]%2 != 0:
num_list[i] = (num_list[i]-1)/2
count += 1
return count
74. 길이에 따른 연산
reduce() 함수 : 리스트 내 요소들을 순차적으로 누적 계산하여 결과를 리턴하는 함수(누적 계산은 따로 함수 정의 必)
from functools import reduce
def func(x, y):
return x+y
def solution(num_list):
answer = 0
if len(num_list) >= 11:
answer = sum(num_list)
else:
answer = reduce(func, num_list)
return answer
75. 원하는 문자열 찾기
.lower() 함수 : 문자열 내 알파벳을 소문자로 변환하는 함수(즉, 대문자 → 소문자 반환)
def solution(myString, pat):
myString = myString.lower()
pat = pat.lower()
if pat in myString:
return 1
else:
return 0
76. 대문자로 바꾸기
.upper() 함수 : 문자열 내 알파벳을 대문자로 변환하는 함수(즉, 소문자 → 대문자 반환)
def solution(myString):
answer = myString.upper()
return answer
77. 소문자로 바꾸기
.lower() 함수 : 문자열 내 알파벳을 소문자로 변환하는 함수(즉, 대문자 → 소문자 반환)
def solution(myString):
answer = myString.lower()
return answer
78. 배열에서 문자열 대소문자 변환하기
def solution(strArr):
answer = []
for i in range(0, len(strArr)):
if (i+1) % 2 == 1: #짝수(인덱스: 0, 2, 4...)
answer.append(strArr[i].lower())
elif (i+1) % 2 == 0: #홀수(인덱스: 1, 3, 5...)
answer.append(strArr[i].upper())
return answer
79. A 강조하기
replace() 함수 : 문자열 안에 특정 문자를 선택하여 새로운 문자로 변경하는 함수
def solution(myString):
answer = myString.lower()
answer = answer.replace('a', 'A')
return answer
80. 특정한 문자를 대문자로 바꾸기
.upper() 함수 : 문자열 내 알파벳을 대문자로 변환하는 함수(즉, 소문자 → 대문자 반환)
replace() 함수 : 문자열 안에 특정 문자를 선택하여 새로운 문자로 변경하는 함수
def solution(myString, alp):
alp_upper = alp.upper()
answer = myString.lower()
answer = answer.replace(alp, alp_upper)
return answer