말랑말랑제리스타일

백준 알고리즘 while문 문제 3개 해설 본문

프로그래밍/백준 알고리즘

백준 알고리즘 while문 문제 3개 해설

제리제리 2022. 2. 11. 13:26

파이썬 백준 알고리즘 10952번 ,10951번 ,1110번 문제 해설

언제나 그렇듯 백준 알고리즘 문제를 포함한 알고리즘 문제는 정답은 없습니다.

저는 제가 제출하고 검증된 파이썬 답안 코드와 푸는 방법에 대한 해설을 제공하는 것이고 코드를 이해하고 분석해서 자신의 것으로 만드는 것은 자기몫입니다.

그럼 지금부터 백준 알고리즘 while문 문제인 10952번, 10951번,1110번을 파이썬으로 풀어봅시다.

반응형

백준 10952번 문제

백준알고리즘 10952 번 문제는 while문을 사용해 0 0이 나올 때까지 반복문을 돌린 후 출력하고 빠져나오는 문제입니다.

파이썬 뿐만 아니라 대부분의 프로그래밍 언어에서 while문과 for문의 차이점은 그냥 문법입니다.

대부분의 while문은 for문으로 표현 가능하고 반대 케이스도 마찬가지입니다.

while True:
    A,B = map(int,input().split())
    if A == 0 & B==0:
        break
    print(A+B)

지금의 백준 10952번 문제도 for 문으로도 가능은 하지만 while 문으로 푸는걸 권장하는 문제다 보니 while문을 이용해 풀어봤습니다.

사실 백준 알고리즘 문제 풀 때 전부 다 받은 다음 한번에 출력해야된다고 생각했는데 그냥 한줄 받고 한줄 출력하더라도 출력 횟수만 맞으면 문제되지 않는걸 이 파이썬 코드로 확인했습니다.

while True로 무한 반복을 만들어주고 안에서 map을 이용해 변수를 입력받아 출력하되 A==0이고 B==0일 때 반복문을 탈출하는 코드입니다.

매번 말씀드리긴 하는데 입출력 부분이 궁금하시다면 아래 글을 참고하시면 도움이 될 것 같습니다.

반응형
 

파이썬에서 여러개 입력받아서 여러개 출력하기

파이썬에서 여러개 입출력이 필요한 상황 백준 알고리즘을 포함해 알고리즘 코딩테스트에서 여러개의 변수를 입력받아 여러개의 변수로 출력하는 것은 가장 기본적인 요소입니다. 코딩테스트

jerry-style.tistory.com

 

백준 10951번 문제

백준 10951번 문제역시 while문을 이용하는 문제로 10952번과 크게 다르지 않습니다.

다만 차이점이라고 하면 마지막이라는걸 알려주는 "0 0"과 같은 라인이 없고 줄이 없으면 마지막이라는걸 인식시켜야하죠.

그런 부분에서 파이썬의 try, except 문이 상당히 유용합니다. 다른 언어에서는 주로 try, catch문이라고 쓰죠.

while True:
    try:
        A,B = map(int,input().split())
    except:
        break
    print(A+B)

if문만 try, except 문으로 바꿔주었고 문자열 파싱이 안될 시, escept 문으로 가서 프로그램을 종료합니다.

이부분에서 다른 언어 사용해보신 분들은 아실텐데 진짜 다시한번 파이썬 코드가 간결합니다.

 

백준 1110번 더하기 사이클

백준 1110번 문제에서 드디어 제가 파이썬 백준 알고리즘 문제 해설 글을 올린 이래 처음으로 계산 로직다운 계산 로직이 적용됩니다.

그래봤자 간단한 연산인데 문제를 잘읽어서 로직을 만들어야합니다.

N = int(input())
n = N
cnt = 0
while (N != n) | (cnt == 0):
    n = (n//10 + n%10)%10 + (n%10 * 10)
    cnt += 1
print(cnt)

 N으로 정수를 입력받고 n이라는 값에 복사해줍니다.

이제부터 N은 원래 값(비교값)이고 n은 계산될 값입니다.

cnt는 최종적으로 횟수를 출력하기 위한 카운터입니다.

while문에서 N이 n과 다르거나 cnt가 0인 경우 돌아줍니다.

반응형

처음에는 분명히 N과 n이 같을것이기 때문에 cnt == 0을 넣어주는겁니다.

n을 계산하는 로직은 10자리를 구할 때는 n//10으로 정수 나누기 연산을 해주고 1자리는 n%10으로 나머지 연산을 해서 10자리와 1자리를 구한 뒤 문제에서 요구하는 식으로 계산해주면 됩니다.

1자리를 10자리로 바꿔주는건 당연히 10을 곱해주면 되겠죠.

반응형
Comments