리스트에서 각 자릿수가 오름차순(증가하는 순서)으로 배열된 숫자만 골라내야 하는 경우가 있습니다. 예를 들어 4578처럼 4 → 5 → 7 → 8로 계속 커지는 숫자는 해당되지만, 113처럼 중간에 같거나 작아지는 숫자는 제외됩니다.
이런 조건을 만족하는 요소를 추출하려면 간단한 반복문과 불리언(Boolean) 플래그 변수, 그리고 문자열 변환을 위한 str() 메서드를 활용하면 됩니다.
예제 코드
my_list = [4578, 7327, 113, 3467, 1858]
print("The list is :")
print(my_list)
my_result = []
for element in my_list:
my_flag = True
for index in range(len(str(element)) - 1):
if str(element)[index + 1] <= str(element)[index]:
my_flag = False
if my_flag:
my_result.append(element)
print("The result is :")
print(my_result)실행 결과
The list is : [4578, 7327, 113, 3467, 1858] The result is : [4578, 3467]
코드 설명
먼저 숫자들이 담긴 리스트를 정의하고 콘솔에 출력합니다.
조건을 만족하는 요소를 저장할 빈 리스트
my_result를 생성합니다.원본 리스트를 반복(iteration)하면서 각 요소마다 플래그 변수를
True로 초기화합니다.각 요소를
str()로 문자열로 변환한 뒤, 인접한 두 자릿수를 차례대로 비교합니다.비교 과정에서 뒤의 자릿수가 앞의 자릿수보다 작거나 같으면, 즉 오름차순이 깨지면 플래그를
False로 설정합니다.모든 자릿수를 검사한 후에도 플래그가
True로 유지된다면, 해당 숫자는 완전한 오름차순이므로 결과 리스트에 추가(append)합니다.마지막으로 최종 결과 리스트를 콘솔에 출력합니다.
핵심 포인트
이 알고리즘의 시간 복잡도는 O(n × d)입니다. 여기서 n은 리스트의 요소 개수, d는 각 숫자의 자릿수 길이입니다. 숫자를 문자열로 변환해 인덱스로 접근하기 때문에 별도의 수학적 연산 없이 직관적으로 자릿수를 비교할 수 있다는 점이 특징입니다.