inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실리콘밸리 엔지니어가 가르치는 파이썬 기초부터 고급까지

[초미니 프로젝트] 동전 앞뒤 맞추기

코드 속도가 어디서 차이나는지 궁금합니다!

307

김석제

작성한 질문수 2

1

안녕하세요~ [초미니 프로젝트] 동전 앞뒤 맞추기 프로젝트를 내 나름대로 바꿔서 팀 정하는 프로그램으로 작성했습니다. 궁금한 것은 아래에 있는 코드를 실행소요 시간입니다.

import random
import time

start = time.time()

n = 500000
while(n > 0):

    random_number = random.randint(1,12)
    mod = random_number % 3

    ## 처음 작성한 방법
    # if mod == 0:
    #     print("Red Team!")
    # elif mod == 1:
    #     print("Blue Team!")
    # else:
    #     print("Green Team!")
    
    ## 더 빠를거라 예상한 방법
    team_list = ["Red", "Blue", "Green"]
    print('{} Team!'.format(team_list[mod]))

    n -= 1

end = time.time()
print(end - start)

랜덤으로 뽑은 숫자로부터 빨강, 파랑, 초록 팀을 출력해주는 코드입니다. 반복문이 여러번 나와서 더 간단하게 만들수 없을까 생각했습니다. 그래서 mod 변수를 인덱스로 사용하여 리스트에 접근하면 더 간단하게 표현할 수 있겠다고 생각했습니다. 그리고 어떤게 더 효율적일지 실험해봤습니다.

처음 작성한 코드는 3.348072052001953,
리스트로 작성한 코드는 4.024623870849609 가 걸렸습니다. 제 생각에는 리스트가 더 효율적일거라 생각했는데 왜 더 시간이 오래 걸렸을까요?

반복문도 mod 값에 맞는 조건을 찾을때까지 순차적으로 접근하고, 리스트도 순차적으로 접근하는 자료구조라 적어도 비슷해야할거라 생각이 듭니다.

python 알고리즘

답변 2

1

미쿡엔지니어

안녕하세요 김석제님,

이미 인프런 AI 인턴이 좋은 대답을 많이 해 놓아서 제가 답변을 할 필요가 없어졌네요 ㅎㅎㅎ.

필드에서는 일단 두번째 방법이 코드 유지하기가 편하기 때문에 두번째 방법을 선호하고, 속도 차이가 미미해서 AI 대답처럼 어떤 서버에서 돌리느냐도 어느정도 차이가 날 듯 합니다.

다른 질문 있으시면 또 질문 하시면 됩니다.

1

김석제

답변해주셔서 감사합니다! 내부적으로 공부할것들이 많네요

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

김석제님께서 질문하신 코드 실행 속도 차이와 관련해서, 바로 정확한 링크를 제공드리긴 어렵지만, 성능 차이에 영향을 줄 수 있는 몇 가지 요소에 대해 설명드리겠습니다.

  1. 리스트 접근 방식: 첫 번째 방법과 비교했을 때, 리스트를 사용하는 두 번째 방법은 추가적인 메모리 할당이 필요합니다. team_list 변수에 리스트를 할당하고 이를 인덱싱하기 위해서는 해당 리스트의 메모리 위치로 가서 값을 찾아오는 과정이 필요합니다. 이런 작은 추가 작업들이 누적되어 전체 실행 시간에 영향을 줄 수 있습니다.

  2. 문자열 포매팅 과정: 두 번째 방법에서는 format을 사용하여 문자열을 생성합니다. 이 과정에서 파이썬은 새로운 문자열 객체를 생성해야 하므로, 이것이 실행 시간을 늘릴 수 있습니다. 첫 번째 방법에서는 그저 바로 문자열을 출력하는 것에 비해 두 번째 방법은 문자열 인터폴레이션 과정이 추가되므로, 이 부분이 성능 차이에 기여할 수 있습니다.

  3. print 함수 호출: 또한, print 함수의 호출 자체가 실행 시간에 영향을 미칩니다. 커맨드라인이나 콘솔로 출력하는 과정 자체가 상당한 시간을 요구할 수 있습니다. 이는 반복문이 수백만 번 실행되는 경우 더욱 두드러집니다.

코드 실행 속도에 영향을 미치는 요소는 다양합니다. 예를 들어, 현재 여러분이 사용하는 파이썬 인터프리터의 구현(예: CPython, PyPy 등), 실행되는 환경의 리소스(컴퓨터의 CPU 속도나 메모리), 그리고 코드 내의 다른 요소들(함수 호출, 반복문의 효율성 등)도 고려되어야 합니다.

이와 유사한 맥락에서, 코드의 실행 시간을 측정하고 비교하는 방법에 관한 질문이 있었습니다: time과 timeit의 차이에서는 time 모듈과 timeit 모듈을 활용한 실행 시간 측정 방법과 그 차이점에 대한 설명이 담겨 있습니다. 이 내용이 코드 성능 테스트를 할 때 유용하게 활용될 수 있을 겁니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

[업데이트] 파이썬 패키지 부분에서 안되어서 강의 진행 불가

2

64

3

html 읽기 오류

1

90

2

DataFrame groupby 사용관련 질문

1

91

2

pylint shell 사용법

0

71

2

자막오류 수정가능한가요?

0

79

1

복합 조건절 관련 궁금증

0

79

2

49.행맨 프로그램 - 재시도 횟수 관련.

1

76

1

64. 파이썬 입문자가 쉽게 빠지기 쉬운 몇가지 에러(혹은 로직)에 대해 알아보기

0

103

2

Replit UI가 업데이트 되서 강의 진행이 멈췄어요

2

179

3

Replit을 사용해보려고 하는데 영상처럼 진행이 안되네요

3

411

2

실무에서의 제네레이터 함수 사용에 관한 질문입니다.

0

64

2

영상이 소리만 나오고 영상은 안보입니다.

0

86

2

pandas 오류 질문

0

125

2

상속 질문

1

132

2

total을 float으로 바꾸신 이유

0

200

2

섹션2 ["환경 vs. 설정 vs. 구성"] 강의 자막 문의

0

142

1

파이썬 data insert to table

0

221

2

파이썬 Class Method 질문

0

155

2

timeit 쓸 때는 만들었던 함수를 재사용 할 수는 없는지?

0

131

2

__repr__ 와 __str__ 차이점?

0

206

2

class method vs static method

0

272

2

Type hint 문법의 Type Checking이 강제성이 있는지?

0

164

2

클래스 접근자 강의 복습부분 0:47에 오타가 있네요

0

104

2

수업 때 쓰셨던 txt file 공유 해주시면 좋겠습니다

1

177

1