[Python] 중간 TEST 오답노트

rang-dev·2020년 6월 5일
0

get_find

"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

Model Solution

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를 해주는 것이 좋을 것 같다는 생각이 들었다.

find_longestword

주어진 리스트안에 있는 단어중 가장 긴 단어를 찾을수 있도록 함수를 완성해주세요.

예시

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

Model Solution

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이 컴퓨터가 이해하기엔 더 효율적인 코드인지 궁금했다.

Timing Execution Speed of Code

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

와우....... 내가 보기에 더 복잡하게 느꼈던 방법이 처리시간이 훨씬 빨랐다! 아무래도 튜플을 사용해서 그런가보다. 잘 알아둬야겠다.

profile
지금 있는 곳에서, 내가 가진 것으로, 할 수 있는 일을 하기 🐢

0개의 댓글