Python - While문, For문

oceanzoo·2021년 5월 8일
0

while문과 for문의 차이를 이해하고 while문과 for문의 예제문제를 풀어보았다.
문제 출처: 문제에 기재 / 참고자료 출처: 설명에 기재

While문 vs For문

while문과 for문은 모두 반복문에 해당한다. 그렇다면 둘의 차이는 무엇일까?

💡for문은 반복해야할 횟수를 알 때 사용한다.
반면에 while문은 반복 횟수는 모르지만 종료 조건을 알 때 사용한다.

#For Loop

for num in range(1,11):
	print("hello")

👉 range(1,11)처럼 내가 반복해야할 횟수를 알 수 있다.

#While Loop

while True:
	name = input("enter the name: ")
    if name.isalpha():
    	print("name: ",name)
        break
        
    else:
    	print("name cannot be an integer")
        continue

👉 입력한 값인 이름이 알파벳일 경우(종료조건)에는 입력한 이름을 출력하고 break를 통해서 while문을 빠져나오도록 했고 입력한 값이 숫자일 경우에는 경고문과 함께 처음으로 돌아가도록 continue를 써주었다.

참고자료 출처: https://www.youtube.com/watch?v=UP2Bk1a2Dgg

While문

예제

더하기 사이클

문제 출처: https://www.acmicpc.net/problem/1110

코드

n = temp = int(input())

cnt = 0

while True:
    result = n//10 + n%10
    new_num = (n % 10)*10 + result%10
    cnt += 1
    n = new_num

    if new_num == temp: break

print(cnt)

풀이
처음에는 입력받은 값을 list 형태로 변환하여서 각 자리수를 더해주는 방법을 택했다. 하지만 변수도 너무 많아지고 10미만 값의 십의자리에 0을 추가까지 해줘야해서 너무 복잡해졌었다.
여기서는 입력값이 100미만의 값들이기 때문에 몫과 나머지를 구하는 식을 통해서 문제를 해결하는 것이 수월하다고 판단했다.
x//y는 x를 y로 나누었을 때의 몫이고 x%y는 x를 y로 나누었을 때의 나머지이다.
입력 값을 10으로 나눈 몫이 십의 자리가 되고 나머지가 일의자리가 되기 때문에 n//10 + n%10을 통해서 합을 구했다.
새로운 값은 입력받은 값의 일의자리를 십의자리로 놓게된다. 따라서 나머지를 구한 후에 이를 십에 자리에 놓기위해 10을 다시 곱해주었다.((n%10) * 10) 그리고 그 전에 구한 합을 10으로 나눈 나머지와 더해주어서 새로운 값을 구해줬다.
사이클 길이를 구하기 위해서 이 작업을 반복할 때마다 cnt를 1씩 증가시켜주었다. (cnt += 1)
그리고 마지막으로 새로운 값과 처음의 값이 같을 때 while문을 빠져나오도록 만들어줬다.

For문

예제

N 반대로 찍기

문제 출처: https://www.acmicpc.net/problem/2742

코드

1)

num = int(input())
for i in range(num,0,-1):
    print(i)

2)

num = int(input())
for i in reversed(range(1,num+1)):
    print(i)

풀이
자연수가 주어졌을 때 이를 역순으로 출력하는 방법은 두가지가 있다. for i in range(num,0,-1)은 num부터 1까지를 -1간격으로 출력하는 것을 말한다.
또한 reversed 함수를 써서도 역순으로 출력할 수 있다.

참고자료 출처: https://realpython.com/python-range/

profile
준비된 개발자를 위한 날갯짓 🦋

0개의 댓글