TIL | 3주차 1) CodeKata
문제 1
def two_sum(nums, target):
# 아래 코드를 작성해주세요.
1. 내가 푼 방법 (난잡함)
from itertools import permutations
def two_sum(nums, target):
# 아래 코드를 작성해주세요.
list_1 = list(permutations(nums, 2))
list_2 =[]
for i in list_1:
if i[0] + i[1] == target:
a = nums.index(i[0])
b = nums.index(i[1])
list_2.append(a)
list_2.append(b)
return list_2
break
else:
continue
2. 기용님한테 배운 방법 (깔끔함)
def two_sum(nums, target):
# 아래 코드를 작성해주세요.
for i_idx , i_val in enumerate(nums) :
for j_idx, j_val in enumerate(nums) :
if i_val + j_val == target :
return [i_idx, j_idx]
새로 알게 된 개념 : enumerate
- enumerate : 열거하다
순서가 있는 자료형(list, set, tuple, dictionary, string)
을 입력으로 받아 인덱스 값을 포함하는 enumerate 객체를 리턴- 리턴값은 다 tuple형태
t = [1, 5, 7, 33, 39, 52]
for p in enumerate(t):
print(p)
# (0, 1)
# (1, 5)
# (2, 7)
# (3, 33)
# (4, 39)
# (5, 52)
str = "enumerate"
for i in enumerate(str):
print(i)
# (0, 'e')
# (1, 'n')
# (2, 'u')
# (3, 'm')
# (4, 'e')
# (5, 'r')
# (6, 'a')
# (7, 't')
# (8, 'e')
obj = {'이름':'김민호', '나이':'30'}
for j in enumerate(obj):
print(j)
# (0, '이름')
# (1, '나이')
obj1 = {'이름':'김민호', '나이':'30'}
for k in enumerate(obj1.items()):
print(k)
# (0, ('이름', '김민호'))
# (1, ('나이', '30'))
문제 2
1시간정도 삽질하다가 결국 못 품 ㅎ ㅎ
def reverse(number):
# 여기에 코드를 작성해주세요.
if number > 0:
str_n = str(number)[::-1]
return int(str_n)
elif number < 0:
str_n1 = str(number)[1:]
return int(str_n1[::-1]) * -1
else:
return 0
새로 알게 된 개념 : 인덱싱
::2
string = "홀짝홀짝홀짝"
print(string[0:5:2])
print(string[::2])
# 홀홀홀
::-1
string = "홀짝홀짝홀짝"
print(string[::-1])
# 짝홀짝홀짝홀
문제 3
이번주 제일 어려웠던 문제!
def get_len_of_str(s): # s = sttrg로 주어진다고 가정
result = 0 # 가장 긴 길이를 반환하기 위해 선언
string = '' # 알파벳 담을 빈 배열 선언
for i in s: # 주어진 단어 sttrg의 알파벳 하나하나에 접근
if i not in string: # 빈 배열에 i가 없으면
string = string + i # 담아. 그럼 st 까지 담길것
elif i in string: # 2번째 t는 이미 string에 담겨있으니까 이때
if len(string) > result: # string의 길이와 result=0 비교해서 전자가 길면
result = len(string) # result는 string의 길이로 다시 선언
string = i # 그리고 'st'였던 string은 i=t로 다시 선언
return max(len(string), result) # 그리고 for문을 다 돌고 나와서 리턴값으로 둘 중에 긴 값 반환
- 착안점 : 길이를 반환하는 문제였기 때문에 빈 배열 하나와 0이라는 숫자를 선언해두고 시작한 점
- 난 똑똑하진 않지만 똑똑한 분들의 사고를 배우는 것은 정말 재밌다ㅎㅎ
문제 4
def same_reverse(num):
# 아래 코드를 입력해주세요.
str_num = str(num)
result = ''
for i in str_num:
result = i + result
if result == str(num):
return True
else:
return False
if문을 for문 안에 넣으면 몇 개가 테스트 통과가 안되는데 왜일까?
이럴 경우 인자로 받은 str_num 전체로 if문을 돌리게 되는 것이 아니라
str_num의 요소 한 개 한 개씩 if문을 돌리게 되는 것이므로 오류가 난다
문제 5
def get_prefix(strs):
sorted_strs = sorted(strs)
res = ''
if len(strs) == 0: # 이 부분을 끝까지 생각 못했음 ㅠㅠ
return ''
for idx, i in enumerate(sorted_strs[0]):
if i == sorted_strs[-1][idx]:
res = res + i
else :
break
return res
print(get_prefix(['start', 'stair', 'step']))
- 착안점 : sorted() 함수로 정렬해주는 게 중요! 1시간정도 고민하면서 겨우 생각해낸 것... ㅠㅠ 정렬해주고 배열의 첫번째 단어와 마지막 단어의 각 인덱스의 알파벳들을 비교해서 같다면 중간의 단어는 같은 것이라는 생각
Author And Source
이 문제에 관하여(TIL | 3주차 1) CodeKata), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@maxkmh/TIL-3주차-1-CodeKata-1저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)