Hyunseok
현재 사이트는 2024년 11월 이후로 업데이트 되지 않습니다. 새 글은 블로그로 확인해주세요. 블로그로 이동
프로그래밍/파이썬 [파이썬] [알고리즘] 반복문
2022. 3. 8. 02:36

현재 사이트는 2024년 11월 이후로 업데이트 되지 않습니다. 새 글은 블로그로 확인해주세요. 블로그로 이동

이번 차례는 반복문이다 

 

흔히 말하는 for와 while문을 설명해보자 

 

사실 while문을 잘 안 쓰는지라 설명이 빈약할 수 있다

 

그럼 for문으로 넘어가 보자

 

 

 

1. 범위

 

파이썬에서 for문을 쓰는 가장 기본적인 방법은 아래와 같다

 

for 변수 in 범위:

 

아니, 이거만 기억하면 사실 for문은 다 쓸 수 있을 거라 생각한다

 

예시 코드들을 보며 설명해보자

for i in range(10):
    print(i)
ary = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for i in ary:
    print(i)

결괏값

>

0

1

2

3

4

5

6

7

8

9

 

첫 번째 방법은 range를 사용하여 i를 출력하는 방법이다

 

기본적으로 range에 숫자를 땅 하고 하나만 넣으면

 

0부터 그 숫자 미만까지 반복하기 때문에 

 

0~9까지가 출력된다

 

두 번째 방법은 그냥 아예 ary값을 범위로 넣어주는 것이다

 

그럼 자연스레 i는 0부터 9까지 출력이 된다 

 

그리고 두 번째 방법을 생각하면 이런 코드도 가능하지 않은가?라는 생각도 할 수 있게 된다

 

도레미파솔라시도 word = input()
for i in range()
    print(i, end=" ")

결괏값

>

도 레 미 파 솔 라 시 도

 

그렇다 for문은 냅다 문자열을 넣어줘도 자동으로 ary로 판별한 방식으로 하나하나 i에 넣어준다

 

그러면 결국 도부터 다음 도까지 차례대로 i에 들어가서 print을 해줄 수 있게 된다

 

이 외 변수를 2개를 for문을 돌리는 방법 emurate를 사용하는 방법 등이 있는데

 

사실 거기까지 갈 필요도 없다 생각하고 나도 사실 잘 모른다

 

여태 300문제 가까이 풀면서 for에 변수 2개를 집어넣어 돌린 적은 단 한 번도 없다 

 

 

 

 

그리고 이 for문을 쓸 때 항상 주의하는 게 있다

 

"for문은 3중 이상으로 쓰지 않기"

 

가 내 신념이다

 

상상해보자 

 

아래와 같은 코드를 보자

for i in range(10):
    for ii in range(10):
        for iii in range(10):
            print(i+ii+iii)

 

상상해보자 이 코드는 몇 번 돌아갈 것인가?

10*10*10 만큼 돌아간다

 

n의 세제곱만큼 돌아간다는 것이다

 

물론 컴퓨터 입장에 서는 별 거 아닐 수도 있다

 

하지만 이게 10이 아니라 100이 된다면?

 

더 나아가 100이 아니라 1000이 된다면?

 

상상하기도 싫다 컴퓨터는 아마 죽여달라 하고 프리징을 내거나 그냥 블루스크린을 내뿜지 않을까 한다

 

물론 쓴 적은 있다 하지만 그걸 쓰기 위해 어느 정도의 범위의 알고리즘 문제인지를 파악하고 마지못해 쓴 경우이다

 

하여튼.. 쓰지 말자 난 정말 안 쓰려고 노력하고 여태 문제 풀면서 3중 for문을 쓴 건 드물다

 

 

 

for문은 이 정도로 하고  while로 넘어가 보자 

 

 

 

 

while

 

사실 이걸 쓰면서도 아직 while이 좀 익숙하지가 않다

 

이분 탐색을 익힐 때 좀 많이 써서 그런지 막 새롭다는 느낌은 아니지만

 

그래도 잘못하면 무한루프로 빠지기 때문에 쓰기 좀 꺼려지는 함수이다 

 

하지만 반대로 이걸 잘 쓴다면 엄청난 편리함을 주지 않을까 한다

 

 

while문은 기본적으로 종료 조건이 명확해야 한다

 

아니면 멍청한 이 컴퓨터는 냅다 뒤질 때까지 그냥 while문만 돌리는 경우가 생기기 때문이다 

 

보통의 예제 코드는 이러하다

10 goal = int(input())
tmp = 0


while tmp !=goal:
    tmp+=1
    if tmp == 9:
        print("almost reached!")

결괏값

>

almost reahced!

 

사실 출력된 값은 중요한 게 아니다 

 

이게 어떻게 돌아갔는지가 중요하다

 

while의 조건문이 False면 기본적으로 while문은 종료된다

 

고로 while문의 종료식을 짤 때는 잘 생각해야 한다 

 

tmp !=goal:

는 그 예를 나타낸다

 

무심코 while tmp == goal:

 

했다가는 그냥 돌아가기 도전에 거짓이 떠버려서

 

while문이 돌아가지 않는 불참사를 겪게 되는 것이다

 

사실 이해할 때 한번 틀어서 이해하면 쉽다

 

while 문의 조건이 거짓일 때 종료된다!라고 생각하면 되는데 

 

이게 맘처럼 쉽지 않다

 

 

그래서 난 생각하기가 귀찮고 또한 종료 조건도 명확하게 걸기 위해 이런 식으로도 쓴다 

 

10 goal = int(input())
tmp = 0


while 1:
    if tmp == 10:
        break
    tmp += 1
    if tmp == 9:
        print("almost reached!")

 

while의 조건에 냅다 그냥 1을 박고

 

종료를 그냥 내부에서 값을 보고 break을 걸어 코드를 멈추게 한다

 

사실 이 방법이 코드를 읽을 때 더 편하지 않을까 한다 

 

길어지면 모르겠으나 여하튼 알고리즘 풀면서(이분탐색 문제제외)while문 들어가는 건 다 이렇게 쓴 기억이 난다 

 

좋은 습관은 아니니 이렇게 하지 말고 다들 

https://wikidocs.net/21

 

이 글을 참고해서 while문을 익히도록 하자.. 

 


프로그래밍/파이썬의 다른 글