해당 포스트는 파이썬에서 문자열을 입력받아 함수 사용없이 오름차순으로 정렬하고 문자 비교를 통해 분리 후 가장 긴 문자열을 추출하는 방법을 소개합니다.
1. INTRO
네이버 지식iN에서 지식을 공유하고 있습니다. 간단한 질문들은 해당 질문에 바로 답변을 드리지만 질문의 내용이 유익하거나 추가 설명이 필요한 경우에는 포스팅을 작성하여 공유드리고 있습니다.
2. 질문
3. 풀이
파이썬(Python)에서는 기본적으로 sort()
나 sorted()
함수를 이용하여 데이터 정렬을 수행합니다. 하지만 프로그래밍(알고리즘) 수업에서는 함수 동작 구조를 이해시키기 위해 함수 사용 없이 문자열들의 순위를 비교하도록 과제를 내기도 합니다. 아마도 위 질문도 그렇게 출제된 과제일 것으로 생각됩니다.
저는 위 문제 풀이를 위해 아래 3가지 절차를 고려하여 함수를 작성하였습니다.
- 문자열 내 알파벳 순서를 비교하여 뒷글자가 작아지면 index 저장
- 1번에서 저장한 인덱스 기준으로 문자열 분리된 2중 리스트 생성
- 2번에서 생성된 리스트 내 가장 긴 문자열 출력
코드 작성
이번 풀이에서 주요하게 봐야할 변수는 아래와 같습니다.
text
: 사용자 입력을 저장한 변수my_list
: (문자열 순위 비교를 통해) 구분된 문자열을 저장한 리스트
Python Script
def find_my_word():
text = input("문자열을 입력하세요 : ")
split_idx = [0]
my_list = []
tmp_list = []
for i in range(1, len(text)):
if (text[i-1] >= text[i]):
split_idx.append(i)
# print(split_idx)
for j in range(len(split_idx)):
if (j == (len(split_idx)-1)):
my_list.extend([text[split_idx[j]:]])
else:
my_list.extend([text[split_idx[j]:split_idx[j+1]]])
for k in range(len(my_list)):
tmp_list.append(len(my_list[k]))
# print(tmp_list.index(max(tmp_list)))
return my_list[tmp_list.index(max(tmp_list))]
find_my_word() ## 문자열을 입력하세요 : abbcdeaxyz ## 'bcde'
4. 마무리
이번 포스트에서는 함수 사용없이 문자열을 정렬하고 분리하여 최대 길이 문자열을 출력하는 방법을 소개하였습니다. 이번 풀이를 통해 문자도 순서를 비교할 수 있는 유니크한 값이 있다는 것을 이해하셨을 거라 생각하며, 해당 구조를 이용하여 문자열 내 정렬(abbcdeaxyz
-> aabbcdexyz
)을 구현해 보시는것도 좋은 연습이 되실 것 같습니다.