TIL (11월 3주차) CodeKata Week1

Hailey Park·2021년 11월 20일
0

알고리즘

목록 보기
1/2
post-thumbnail

Day 1.
two_sum함수에 숫자 리스트와 '특정 수'를 인자로 넘기면, 더해서 '특정 수'가 나오는 index를 배열에 담아 return해 주세요.
nums: 숫자 배열
target: 두 수를 더해서 나올 수 있는 합계
return: 두 수의 index를 가진 숫자 배열

예를 들어,
nums은 [4, 9, 11, 14]
target은 13 
nums[0] + nums[1] = 4 + 9 = 13 이죠?
그러면 [0, 1]이 return 되어야 합니다.

*target으로 보내는 합계의 조합은 배열 전체 중에 2개 밖에 없다고 가정하겠습니다.

A.

def two_sum(nums, target):
	for i in nums:
		a = []
		a.append(nums.index(i))
		a.append(nums.index(target-i))
		return a

답을 리스트로 return 해야하기 때문에 새로운 리스트를 만들어주었고, 새 리스트에 nums에 있는 i와 target에서 i를 뺀 값을 append로 추가해주었다.

더 간결한 코드

def two_sum(nums, target):
	for num in nums:
    	return [nums.index(num), nums.index(target - num)]

Day 2.
reverse 함수에 정수인 숫자를 인자로 받습니다.
그 숫자를 뒤집어서 return해주세요.
x: 숫자
return: 뒤집어진 숫자를 반환!

예를 들어,
x: 1234
return: 4321
x: -1234
return: -4321
x: 1230
return: 321

A.

def reverse(number):
	if number == 0:
 		return 0
	elif number > 0:
 		return int(str(number)[::-1])
	else:
		a = str(number * -1)[::-1]
		return int(a) * -1

number가 0일 때 : 0을 리턴
number가 양수일 때 : number를 str으로 바꿔서 reverse시킨 다음 다시 int로 바꿔서 리턴
numer가 음수일 때 : number를 양수로 바꾼 다음 str으로 바꿔서 reverse시킨 다음 int로 다시 바꿔서 -1 을 곱해준 것을 리턴

Day3.
String 형인 str 인자에서 중복되지 않은 알파벳으로 이루어진 제일 긴 단어의 길이를 반환해주세요.
str: 텍스트
return: 중복되지 않은 알파벳 길이 (숫자 반환)

예를 들어,
str = "abcabcabc"
return 은 3
=> 'abc' 가 제일 길기 때문
str = "aaaaa"
return 은 1
=> 'a' 가 제일 길기 때문
str = "sttrg"
return 은 3
=> 'trg' 가 제일 길기 때문

A.

def get_len_of_str(s):
  temp = []
  temp2 = []
  result= []
  for i in s :
    temp.append(i)
  
  for i in reversed(range(len(temp))) :
    if temp[i] in temp2 :
      result.append(len(temp2))
      temp2 = []
      temp2.append(temp.pop())
      continue
    temp2.append(temp.pop())
  result.append(len(temp2))
 

  return max(result)
s = "sttrg"
print(get_len_of_str(s))

결국 못 풀어서 주명님의 답을 가져왔다.

Day4.
숫자인 num을 인자로 넘겨주면, 뒤집은 모양이 num과 똑같은지 여부를 반환해주세요.
num: 숫자
return: true or false (뒤집은 모양이 num와 똑같은지 여부)

예를 들어,
num = 123
return false
=> 뒤집은 모양이 321 이기 때문
num = 1221
return true
=> 뒤집은 모양이 1221 이기 때문
num = -121
return false
=> 뒤집은 모양이 121- 이기 때문
num = 10
return false
=> 뒤집은 모양이 01 이기 때문

A.

def same_reverse(num):
	if str(num) == ''.join(reversed(str(num))):
		return True
	else:
		return False

Day5.
strs은 단어가 담긴 배열입니다.
공통된 시작 단어(prefix)를 반환해주세요.
예를 들어
strs = ['start', 'stair', 'step']
return은 'st'
strs = ['start', 'wework', 'today']
return은 ''

A.

def get_prefix(strs):
	if len(strs) == 0:
		return ''
	result = ''
	strs = sorted(strs)
	for i in strs[0]:
		if strs[-1].startswith(result+i):
			result += i
		else:
			break
	return result
profile
I'm a deeply superficial person.

0개의 댓글