"get_find" 함수를 작성하세요.
문자와 문자열이 주어졌을때, "get_find" 함수는 주어진 문자열에서 함께 주어진 문자가 나타나는 첫번째 위치를 반환합니다.
Notes:
- 문자열의 첫번째 문자는 인덱스 값 0 을 가집니다.
- 만약 문자열에 해당 문자가 여러번 나타나면, 첫번째로 나타나는 위치를 반환해야 합니다.
- 만약 문자가 문자열에 존재하지 않는다면, -1 을 반환해야 합니다.
- find 함수를 사용하지 마세요.
output = get_find('a', 'I am a hacker')
print(output) # --> 2
def get_find(char, sentence):
for i in range(len(sentence)):
if sentence[i]== char:
return i
break
return -1
def get_find(char, str):
if char not in str:
return -1
for i in range(0,len(str)):
if str[i] == char:
return i
나는 loop를 다 돌고나서 못찾으면 return -1
을 하도록 했는데 답안에서는 해당 char이 있는지 없는지 먼저 확인하고 없으면 바로 -1을 return하도록 했다.
내 코드에서는 해당 char이 없는 경우에 loop를 끝까지 돌아야하기때문에 답안에서 사용한 방법이 더 효율적이다. 하지만 답안에서도 for문을 돌고 해당 char을 찾았으면 더이상 loop를 돌 필요가 없으므로 break를 해주는 것이 좋을 것 같다는 생각이 들었다.
주어진 리스트안에 있는 단어중 가장 긴 단어를 찾을수 있도록 함수를 완성해주세요.
print(find_longest_word(["PHP", "Exercises", "Backend"])) # --> "Exercises"
def find_longest_word(words):
longest = words[0]
for word in words:
if len(longest) < len(word):
longest = word
return longest
def find_longest_word(words):
word_len = []
for n in words:
word_len.append((len(n), n))
word_len.sort()
return word_len[-1][1]
사실 나는 내가쓴 방법이 더 익숙해서 그런지 내 방법이 훨씬 간단해보이는데 model solution이 컴퓨터가 이해하기엔 더 효율적인 코드인지 궁금했다.
import datetime
def find_longest_word_mine(words):
longest = words[0]
for word in words:
if len(longest) < len(word):
longest = word
return longest
def find_longest_word(words):
word_len = []
for n in words:
word_len.append((len(n), n))
word_len.sort()
return word_len[-1][1]
start = datetime.datetime.now()
find_longest_word_mine(["PHP", "Exercises", "Backend","abc","defggaef"])
finish = datetime.datetime.now()
print(f'mine: {finish-start}')
start = datetime.datetime.now()
find_longest_word(["PHP", "Exercises", "Backend","abc","defggaef"])
finish = datetime.datetime.now()
print(f'model_solution: {finish-start}')
> mine: 0:00:00.000012
model_solution: 0:00:00.000008
와우....... 내가 보기에 더 복잡하게 느꼈던 방법이 처리시간이 훨씬 빨랐다! 아무래도 튜플을 사용해서 그런가보다. 잘 알아둬야겠다.