■ 출처
- 코딩테스트 : Python3 / 코딩테스트 입문 / 모든 상태 체크 / 1~30문제
■ 연습문제
1. 옹알이 (1)
#조카가 발음할 수 있는 4가지 발음이 babbling에 존재할 경우, 각각의 길이를 확인해서 answer에 카운트
def solution(babbling):
answer = 0
nephew_list = ["aya","ye","woo","ma"]
for i in babbling:
result = 0
for j in range(0, len(nephew_list)):
if i.find(nephew_list[j]) != -1:
result += len(nephew_list[j])
if len(i) == result:
answer += 1
return answer
2. 다음에 올 숫자
등차수열 : 연속하는 두 항의 차이가 모두 일정한 수열
등비수열 : 각 항이 이전 항과 일정한 수준을 가지는 수열
나누셈 연산자 구분 : ①'/'은 기본적인 나눗셈, ②'//'은 나눗셈의 몫, ③%은 나눗셈의 나머지
def solution(common):
if (common[1]-common[0]) == common[2]-common[1]:
return (common[-1] + (common[-2]-common[-3]))
elif (common[1]//common[0]) == common[2]//common[1]:
return (common[-1] * (common[-2]//common[-3]))
3. 연속된 수의 합
#num으로 total을 나눠구한 중앙값을 기준으로 순차적으로 '+/-'하하여 'result'값이 'total'이 되도록 반복하는 과정
def solution(num, total):
calcul = total // num
calcul_list = []
#return [i for i in range(calcul-(num-1)//2, calcul+(num+2)//2)]
for i in range(calcul-(num-1)//2, calcul+(num+2)//2):
calcul_list.append(i)
return calcul_list
4. 종이 자르기
def solution(M, N):
answer = (M*N)-1
return answer
5. 문자열 밀기
find() 함수 : 특정 문자열의 위치, 인덱스 번호를 찾는 함수(만약, 지정한 문자열을 찾지 못하면 '-1' 반환)
- 예시, str.find(찾을 문자, 시작 index, 끝 index) ※ 2, 3번째 파라미터 생략 가능
def solution(A, B):
return (B * 2).find(A)
6. 잘라서 배열로 저장하기
def solution(my_str, n):
return [my_str[i:i+n] for i in range(0, len(my_str), n)]
7. 7의 개수
.join() 함수 : 매개변수로 들어온 리스트에 있는 요소 하나하나를 합쳐서 하나의 문자열로 바꾸는 함수
map() 함수 : 여러 개의 데이터를 받아서 각각의 요소에 함수를 적용한 결과를 반환하는 내장 함수
- 예시, map(①적용할 함수, ②함수를 적용할 데이터 집합)
count() 함수 : 문자열 내부에서 특정 문자, 혹은 문자열이 포함되어있는지 여부를 계산하는 함수
def solution(array):
return ''.join(map(str, array)).count('7')
8. 문자열 정렬하기 (2)
.lower() 함수 : 문자열 내 알파벳을 소문자로 변환하는 함수(즉, 대문자 → 소문자 반환)
sorted() 함수 : 새로운 리스트를 정렬
def solution(my_string):
return ''.join(sorted(list(','.join(my_string.lower()).split(','))))
9. 세균 증식
#n개 세균 수에서 1시간당 2배 숫자로 증가
def solution(n, t):
answer = n
for i in range(0, t):
answer *= 2
return answer
10. 제곱수 판별하기
#참고, 제곱수를 구할 때 'n'에서 0.5를 곱하면 해당 수 확인 가능
def solution(n):
answer = 0
if (int(n**0.5)**2) == n:
return 1
else:
return 2
11. 문자열안에 문자열
def solution(str1, str2):
return 1 if str2 in str1 else 2
12. OX퀴즈
eval() 함수 : 문자열로 받은 사칙연산 식을 실행하는 함수
def change_oper(operator):
operator = operator.replace('=', '==')
return eval(operator)
#한줄코딩: for문+if문
def solution(quiz):
return ["O" if change_oper(quiz[i])==1 else "X" for i in range(0, len(quiz))]
"""answer = []
for i in range(0, len(quiz)):
if change_oper(quiz[i]) == 1:
answer.append("O")
else:
answer.append("X")"""
13. 자릿수 더하기
list() 함수 : 리스트 형식을 반환하는 함수
- 참고, 문자요소에 list() 함수를 사용할 경우, 상세 문자요소로 구분 가능
def solution(n):
print(type(n))
return sum(list(map(int, list(str(n)))))
14. n의 배수 고르기
나누셈 연산자 구분 : ①'/'은 기본적인 나눗셈, ②'//'은 나눗셈의 몫, ③%은 나눗셈의 나머지
def solution(n, numlist):
return [numlist[i] for i in range(0, len(numlist)) if numlist[i]%n == 0]
"""answer = []
for i in range(0, len(numlist)):
if numlist[i]%n == 0:
answer.append(numlist[i])
return answer"""
15. 숫자 찾기
find() 함수 : 문자열 내부에서 특정 문자가 어디에 위치하는지 왼쪽부터 찾는 함수(숫자일 경우, 문자 타입으로 변화 必)
def solution(num, k):
return int(str(num).find(str(k))+1) or -1
16. 배열의 유사도
set() 함수 : 집합(set) 타입으로 변경하여 중복된 요소를 제거하는 함수
비트 연산자 & : 비트 단위 AND 연산을 수행
- 예시, 두 숫자의 각 비트를 비교하여 둘다 1일 때 해당 비트를 1로 설정하고, 그렇지 않으면 0으로 설정
논리 연산자 and : 논리적인 AND 연산을 수행
- 예시, 두 개의 피연산자가 모두 True일 때 True를 반환하고 그렇지 않으면 False를 반환
def solution(s1, s2):
return len(set(s1)&set(s2))
"""answer = 0
for i in range(0, len(s2)):
for j in range(0, len(s1)):
if s2[i] == s1[j]:
answer += 1
return answer"""
17. 문자열 계산하기
def solution(my_string):
return eval(my_string)
18. 가장 큰 수 찾기
.index() 함수 : 리스트 중에서 특정한 원소가 몇 번째에 처음으로 등장했느지 알려주는 함수
- 예시, [123, 421, 212].index(421) → 1
def solution(array):
return [max(array), array.index(max(array))]
19. 편지
def solution(message):
return len(message)*2
20. 약수 구하기
def solution(n):
return [i for i in range(1, n+1) if (n%i==0)]
"""answer = []
for i in range(1, n+1):
if n%i == 0:
answer.append(i)
return answer"""
21. 한 번만 등장한 문자
'='과 '=='의 차이점
- = : 변수를 지정하는 의미
- == : if문과 함께 쓰이는 것으로 값과 같은지 확인하는 의미
def solution(s):
answer = []
cnt = 0
alp_list = list(set(list(s)))
for i in range(0, len(alp_list)):
for j in range(0, len(s)):
if alp_list[i] == s[j]:
cnt += 1
if cnt == 1:
answer.append(alp_list[i])
cnt = 0
return ''.join(sorted(answer))
"""def solution(s):
answer = "".join(sorted([ch for ch in s if s.count(ch) == 1]))
return answer"""
22. 인덱스 바꾸기
def solution(my_string, num1, num2):
my_string = list(my_string)
my_string[num1], my_string[num2] = my_string[num2], my_string[num1]
answer = ''.join(my_string)
return answer
23. 영어가 싫어요
enumerate() 함수 : 반복문(for 등)에서 순서와 요소 값을 동시에 반환받을 때 사용하는 함수
def solution(numbers):
number_list = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
for idx, val in enumerate(number_list):
numbers = numbers.replace(val, str(idx))
return int(numbers)
24. 대문자와 소문자
알파벳 대/소문자 변환
- .upper() 함수 : 소문자 → 대문자 반환하는 함수
- .lower() 함수 : 대문자 → 소문자 반환하는 함수
알파벳 대/소문자인지 여부 반환
- .isupper() 함수 : 대문자 → True 반환하는 함수
- .islower() 함수 : 소문자 → True 반환하는 함수
def solution(my_string):
answer = ''
for i in range(0, len(my_string)):
if my_string[i].isupper() == True:
answer += my_string[i].lower()
else:
answer += my_string[i].upper()
return answer
25. 암호 해독
def solution(cipher, code):
return cipher[code-1::code]
26. 369게임
def solution(order):
cnt = 0
for i in list(str(order)):
if (i=='3') or (i=='6') or (i=='9'):
cnt += 1
return cnt
27. 가까운 수
#answer 배열 요소값과 n값에 절대값을 적용하여 빼서 최소값에 해당하는 인덱스 배열요소값을 반환
#여러개를 반환할 경우, 작은 수를 반환
def solution(array, n):
abs_num = []
array.sort()
for i in array:
abs_num.append(abs(i-n))
answer = [array[abs_num.index(min(abs_num))]]
if len(answer) > 1:
return min(answer)
else:
return answer[0]
28. 삼각형의 완성조건 (1)
def solution(sides):
max_num = max(sides)
del sides[sides.index(max_num)]
return 1 if max_num < sum(sides) else 2
"""if max_num < sum(sides):
return 1
else:
return 2"""
29. 중복된 문자 제거
.join() 함수 : 매개변수로 들어온 리스트에 있는 요소들을 하나의 문자열로 합치는 함수
dict.fromkeys(seq, value) 함수 : 딕셔너리를 생성할 때 편리하게 사용하는 메소드
- seq : 생성하려는 dictionary의 key 목록
- value : 생성하려는 dictionary의 value값
def solution(my_string):
return ''.join(dict.fromkeys(my_string))
"""def solution(my_string):
answer = ''
for i in my_string:
if i not in answer:
answer += i
return answer"""
30. k의 개수
def solution(i, j, k):
cnt = 0
for i in range(i, j+1):
#list함수를 활용해서 ['1']....['1', '0']...형식으로 변환하여 k숫자 개수를 찾는 방법
for j in lis0t(str(i)):
if j == str(k):
cnt += 1
return cnt