Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

문자열을 한 번만 순회해 공백을 맨 앞으로 이동하는 파이썬 프로그램

단어와 공백이 섞여 있는 문자열이 주어졌을 때, 문자열 전체를 단 한 번만 순회하면서 모든 공백을 문자열의 맨 앞으로 이동시키는 것이 이번 글의 목표입니다. 이 문제는 파이썬(Python)의 리스트 컴프리헨션(List Comprehension)을 활용하면 아주 간단하고 효율적으로 해결할 수 있습니다.

예제

입력: string = "python program"
출력: string = " pythonprogram"

알고리즘

1단계: 단어와 공백이 포함된 문자열을 입력받습니다.
2단계: 입력 문자열을 순회하며 리스트 컴프리헨션으로 공백이 없는 문자열을 만듭니다.
3단계: 제거된 공백의 개수를 계산합니다.
4단계: 공백 개수만큼의 공백 문자열을 생성합니다.
5단계: 공백이 제거된 문자열을 그 뒤에 연결합니다.
6단계: 최종 결과 문자열을 출력합니다.

예제 코드

# 파이썬에서 단일 순회로 문자열의 공백을 앞으로 이동시키는 함수
def frontstringmove(s):
    noSp = [i for i in s if i != ' ']   # 공백을 제외한 문자만 추출
    space = len(s) - len(noSp)          # 공백 개수 계산
    result = ' ' * space                # 공백 개수만큼 앞부분 생성
    result = '"' + result + ''.join(noSp) + '"'
    print("Final Result ::>", result)

# 드라이버(실행) 코드
if __name__ == "__main__":
    s = input("Enter String ")
    frontstringmove(s)

실행 결과

Enter String python program
Final Result ::> " pythonprogram"

코드 설명

[i for i in s if i != ' ']는 문자열에서 공백을 제외한 모든 문자를 새 리스트에 담습니다. 이때 원본 문자열의 길이에서 새 리스트의 길이를 빼면(len(s) - len(noSp)) 제거된 공백의 개수를 알 수 있습니다. ' ' * space는 공백 문자를 해당 개수만큼 반복해 문자열의 앞부분을 만들고, ''.join(noSp)로 나머지 문자들을 하나로 합쳐 연결합니다.

전체 과정은 문자열을 한 번만 순회하므로 시간 복잡도는 O(n)이며, 문제의 조건인 '단일 순회' 요구 사항을 그대로 충족합니다.