백준발행일 2023. 5. 12.원본 https://blog.naver.com/jword_/223100559189 ↗

기초 알고리즘 문제, 반복문 - 자릿수 분리하기

기초 알고리즘 문제, 반복문 - 자릿수 분리하기 — #기초알고리즘문제 #알고리즘반복문 #자릿수분리하기 AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용...

#백준#Naver Blog

#기초알고리즘문제 #알고리즘반복문 #자릿수분리하기

​

AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다

코딩테스트 준비하기

공부하는 이유는 결국 IT기업에서 취직하기 위함입니다. 일단 우선적으로는 그렇습니다. 학사과정을 밟으면서 약 2년정도 코테 준비를 해나갈 것 같습니다. AI스쿨에서 배운대로 기초부터 심화과정을 거쳐 최상위 실력자로 거듭나기 위해 끊임없이 도전합니다!

평가방법

문제가 주어진 후, 예제 표가 제시됩니다. 문제의 조건대로 코드를 구현하고 예제 표에서 입력값에 따른 출력값을 제시합니다. 어떻게 코드를 짜든 상관없으니 출력을 정확하게 만드는 것이 가장 중요합니다!

​

자릿수 분리하기

반복문 기초문제

이미지

지금도 가금 헷갈리는 반복문 문제입니다. 복습하면서 다시금 기초를 다져나가야겠습니다 :D

​

문제

💡 0 이상의 정수가 주어졌을 때, 정수를 앞자리부터 차례대로 끊어서 출력하고, 마지막 줄에는 각 자릿수의 합을 출력하라. 예를 들어 1023이 입력된다면, 1, 0, 2, 3, 6을 출력하면 된다.

예제 입출력

이름입력출력설명
기본 110231
0
2
3
66 = 1 + 0 + 2 + 3
기본 2121
2
33 = 1 + 2
기본 3325243003
2
5
2
4
3
0
0
1919 = 3 + 2 + 5 + 2 + 4 + 3 + 0 + 0
경계값 100
0
경계값 21000000001
0
0
0
0
0
0
0
0
1

문제풀이

정수를 입력받기

우선 간단하게 정수를 입력받습니다.

num = int(input('0이상의 정수 입력: '))

​

나머지와 몫을 활용하기

나머지를 활용하여 문제를 풀겠습니다. 각 자릿수를 따로 분리하려면 10으로 나눈 나머지가 필요합니다.

예를 들어 162가 입력되었다고 가정해봅시다. 162 % 10 = 2가되며 162 // 10 = 16이 됩니다. 162에서 2를 분리하는데 성공하였습니다. 이런식으로 몫이 0이 될때까지 분리합니다.

num = int(input('0이상의 정수 입력: '))​while True: remain = num % 10 quo = num // 10 num = quo​ if quo == 0: break

모든 자릿수의 합구현하기

문제 조건에 모든 자릿수를 합을 요구하고 있습니다. 반복문 밖에 따로 변수를 만든 후 각 자릿수를 하나씩 더해주겠습니다.

​

num = int(input('0이상의 정수 입력: '))remain\_sum = 0​while True: remain = num % 10 quo = num // 10 # 자릿수의 함 remain\_sum += remain num = quo​ if quo == 0: break

나머지를 큰 자리순서대로 표현하기

원래 반복문안에 나머지가 출력되도록 구현할 수 있습니다. 하지만 이렇게 될 경우 가장 낮은 자릿수 부터 출력이 됩니다. 문제에서는 가장 큰 자릿수 순서로 출력을 요구하고 있습니다. 즉, 162라면 2, 6, 1의 순서가 아닌 1, 6, 2 순서로 출력이 되어야 합니다. 구현을 위해서 list를 따로 만들어주었습니다.

​

list를 만든후 모든 나머지를 list에 담습니다. list = \[remain\_low1, remain\_low2, ... \] 이렇게 담은 list를 reverse()메서드를 사용하여 뒤집은 후 출력해줍니다.

​

num = int(input('0이상의 정수 입력: '))remain\_sum = 0remain\_list = \[\]​while True: remain = num % 10 quo = num // 10​ # 나머지를 list에 담기 remain\_list.append(remain) # 자릿수의 함 remain\_sum += remain num = quo​ if quo == 0: break​# list를 뒤집는다.remain\_list.reverse()

이제 remain\_list는 가장 큰 자릿수의 나머지 순서로 되어있으니 출력해줍시다.

​

구현완료

리스트의 각 요소를 출력하기 위해서는 반복문이 필요합니다.

for remain in remain\_list print(remain)

위 코드를 맨 마지막에 넣어줍니다.

print(remain\_sum)

마지막으로 모든 나머지의 합도 출력해줍니다.

최종코드

num = int(input('0이상의 정수 입력: '))remain\_sum = 0remain\_list = \[\] while True: remain = num % 10 quo = num // 10 remain\_list.append(remain) remain\_sum += remain num = quo​if quo == 0: breakremain\_list.reverse()​for remain in remain\_list: print(remain)​print(remain\_sum)

구현이 완료되었습니다! 원하는 정수를 입력하면 문제 요구사항대로 출력이 잘됩니다 :D

​

몰랐던 부분

복습으로 직접 구현해보면서 까먹은 코드를 아래 정리해보았습니다.

​

  1. 리스트를 역으로 만드는 메서드 reverse()를 다시 학습하였습니다.
  1. list의 각 요소를 뽑아낼때는 반복문을 사용해야합니다.
  1. num = quo로 설정해야합니다. -> 이를 하지 않아 코드가 실행되지 않았음
  1. 나머지는 &가 아니라 % 입니다.