인프런 커뮤니티 질문&답변

한규원님의 프로필 이미지
한규원

작성한 질문수

파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)

5. 정다면체

for문 질문있습니다.

작성

·

259

1

#제가 작성한코드
for i in range(n):
    for x in range(m):
        cnt[i+x] += 1 
    else:
        continue
#강사님이 작성한코드
for i in range(1,n+1):
    for x in range(1,m+1):
        cnt[i+x] += 1 
    else:
        continue
같은 건가요??
저는 0~n까지 접근하고,
강사님은 1~n+1까지 접근하고 같은건가요?

답변 2

1

다릅니다. 

#같습니다.
for i in range(5):
  print("Hello World")
#결과: "Hello World"
"Hello World"
"Hello World"
"Hello World"
"Hello World"

for i in range(1, 5+1):
  print("Hello World")
#결과: "Hello World"
"Hello World"
"Hello World"
"Hello World"
"Hello World"

위와 같이 "~번반복"하고싶을때는 range(n), range(1, n+1)둘다 괜찮지만 아래와같이 i자체(값)를 사용하고싶을때는 에러가 날 수도있습니다.

arr = [1, 2, 3, 4, 5]
for i in range(5):
    print(arr[i])
#결과:1
#2
#3
#4
#5
for i in range(1, 5 + 1):
    print(arr[i])
#결과:#2
#3
#4
#5
#Traceback (most recent call last):
#  File "/Users/user/Desktop/test/test.py", line 5, in <module>
#    print(arr[i])
#IndexError: list index out of range

그리고 아래같은경우도 있습니다.

n = 12
for i in range(n):
    if n % i == 0:
        print(i, end=' ')
#결과:Traceback (most recent call last):
#  File "/Users/user/Desktop/test/test.py", line 3, in <module>
#    if n % i == 0:
#ZeroDivisionError: integer division or modulo by zero

for i in range(1, n+1):
    if n % i == 0:
        print(i, end=' ')
#결과:1 2 3 4 6 12

따라서 필요에 따라 (n), (1, n+1)를 구분하며 사용해야합니다.

0

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

이 문제에서 i와 j는 주사위에 눈을 의미합니다. 즉 i값이 정사면체 눈을 의미한다면  i의 값은 1부터 4까지로 표현되어야 가독성도 좋고 의미도 제대로 되어 코드구현이 쉽습니다.

한규원님의 프로필 이미지
한규원

작성한 질문수

질문하기