Python - While문, For문
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/
Author And Source
이 문제에 관하여(Python - While문, For문), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@5ceanzoo/Python-While문-For문저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)