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개 밖에 없다고 가정하겠습니다.
li = [11, 4, 14, 9]
def two_sum(nums, target):
for i in range(len(nums)):
for j in range(i+1,len(nums)):
if nums[i] + nums[j] == target:
return [i, j]
two_sum(li, 13)
2중 반복문을 통해 순차적으로 더해주면서 if문으로 target과 비교.
reverse 함수에 정수인 숫자를 인자로 받습니다.
그 숫자를 뒤집어서 return해주세요.
x: 숫자
return: 뒤집어진 숫자를 반환!
예들 들어,
x: 1234
return: 4321
x: -1234
return: -4321
x: 1230
return: 321
def reverse(number):
## "-"부호를 붙여주면 음수는 양수로, 양수는 음수로 변경된다.
if number < 0:
r = int(str(-number)[::-1])
return -r
else:
r = int(str(number)[::-1])
return r
reverse(-123)
Integer는 index가 없기 때문에 문자형으로 변경 후 [::-1]로 뒤집어 reverse해 줘야함.
String상태로 음수를 reverse하면 321-와 같은 꼴이 되기 때문에
if문으로 음수를 걸러 -
를 붙여 양수로 만들고 reverse한 후
return시 -
를 붙여 음수를 반환함.
String 형인 str 인자에서 중복되지 않은 알파벳으로 이루어진 제일 긴
단어의 길이를 반환해주세요.
str: 텍스트
return: 중복되지 않은 알파벳 길이 (숫자 반환)
예를 들어,
str = "abcabcabc"
return 은 3
=> 'abc' 가 제일 길기 때문
str = "aaaaa"
return 은 1
=> 'a' 가 제일 길기 때문
str = "sttrg"
return 은 3
=> 'trg' 가 제일 길기 때문
alphabets = 'abcabcabc'
def get_len_of_str(s):
length = 0
str = ""
for i in s:
# str 변수에 해당 문자가 없으면 넣는다.
if i not in str:
str += i
else:
# 문자열에 해당 문자가 있으면 str의 길이와 length의 길이를
# 비교하고 더 긴쪽을 length에 넣는다.
# 그리고 그 i부터 새로 str에 넣는다.
if len(str) > length:
length = len(str)
str = i
else:
str = i
return max(length, len(str))
get_len_of_str(alphabets)
비교를 시작한 후 나온적 없는 문자를 저장하는 빈 변수 하나가 필요함. -> str
가장 긴 문자열의 길이를 기록하는 변수가 필요함. -> length
str 변수에 중복되는 문자가 생길 경우 끊고 새로 시작하는 경우를 생각해야함.
가장 긴 문자열이 아닌 문자열의 길이만 리턴하면 되기 때문에
중복문자를 만났을 경우
1. 현재 문자열의 길이와 기존 문자열의 길이를 비교하고 더 긴 쪽이 length 변수에
그 길이가 저장된다.
2. str 변수에 기존 저장된 문자를 삭제하고 중복된 문자를 넣고 다시 반복을 시작한다.
str에 저장된 문자의 길이가 length보다 긴 경우이면서 중복이 없는 상태로
연산이 끝나게 되면 더 짧은 길이의 length가 return되기 때문에
마지막 return부분은 str과 lenght 변수를 비교하여 큰쪽을 반환토록 해야한다.
숫자인 num을 인자로 넘겨주면, 뒤집은 모양이 num과 똑같은지 여부를 반환해주세요.
num: 숫자
return: true or false (뒤집은 모양이 num와 똑같은지 여부)
예를 들어,
num = 123
return false
=> 뒤집은 모양이 321 이기 때문
num = 1221
return true
=> 뒤집은 모양이 1221 이기 때문
num = -121
return false
=> 뒤집은 모양이 121- 이기 때문
def same_reverse(num):
if num < 0:
return False
else:
a = int(''.join(reversed(str(num))))
if a == num:
return True
else:
return False
뒤집은 '모양'이 중점이다.
음수는 뒤집은 경우 무조건 모양이 달라지기 때문에 False.
python은 Integer 자료형을 index로 접근할 수 없기 때문에
String형으로 변경 후 뒤집고 다시 Integer로 변경해야 한다.
strs은 단어가 담긴 배열입니다.
공통된 시작 단어(prefix)를 반환해주세요.
예를 들어,
strs = ['start', 'stair', 'step']
return은 'st'
strs = ['start', 'wework', 'today']
return은 ''
strs1 = ['start', 'stair', 'step', 'sta']
def get_prefix(strs):
commons = ''
# sorted로 앞에서 뒤로 갈수록 다른 문자가 정렬되게 된다.
# 따라서 처음과 끝의 문자간의 차이는 그 이외의 문자들에도 공통으로
# 적용되기 때문에 처음과 끝 둘끼리만 비교하면 된다.
sort_strs = sorted(strs)
if len(strs) == 0:
return ''
else:
# for문 + range()로 iteration 횟수지정/index값 생성
for i in range(len(sort_strs[0])):
if sort_strs[0][i] == sort_strs[-1][i]:
commons += sort_strs[0][i]
else:
# 이곳에 바로 return commons를 하면 문제가 발생한다.
# 비교 대상이 ['aa', 'aa']인 경우 return 없이 반복문이 끝나기 때문.
break
return commons
알파벳 문자열을 담은 list에 sorted함수를 적용하면 a~z순서를 기준으로
list에 정렬이 된다.
['aza', 'abd', 'abc']는 ['abc', 'abd', 'aza']의 순서가 된다.
이 경우 3개의 요소 모두 공통된 글자는 앞머리부터 비교를 시작함을 기준으로
a뿐이고 처음과 끝의 문자만 비교하면 된다.
python 문법에 익숙해지는 과정중이라 더 괴로운 시간이었다.
3번과 5번 문제같은 경우는 동료의 풀이를 보고나서야 이해하는 수준이었다.
그래 이해는 했으니 일단 다행이다.
설명을 듣고 알수없는 오기와 자존심이 피어나서 당장 다시 풀어보지 않고
며칠 뒤에 복기하며 풀이를 해 나갔다.
더 잘하고싶다.
조울증이 찾아오려는 것인지 열받는데 동시에 재미도 있다.
코딩 이거 나한테 늘 이런식이다.
묘한 매력이 있다.
지금 감정들을 생각나는대로 쓰고나니 뭔가 싸이코같은 문맥인 것같아
일단 조금 휴식을 취해야겠다는 생각이 든다.
추석 연휴에 예비처가댁에 와서 눈치껏 블로그를 쓰는 중인데
생각보다 기가 많이 빨린다.