코딩라이브러리/파이썬

파이썬 문자열 거꾸로 해보기 (with 백준 1251 6438)

유니네 라이브러리 2024. 5. 19. 16:48

파이썬에서 문자열을 뒤집는 3가지 방법이 있다.

백준 문제(1251, 6438)로 실전 연습을 해본다.

 

📌 1. 문자열을 뒤집는 3가지 방법 📌

 

문자열을 거꾸로 출력하는 방법은 여러 가지가 있다.

이 글에서는 슬라이싱, reverse() 함수, sorted() 내장 함수를 사용한 방법을 소개한다.

 

🔹 1) 문자열 슬라이싱을 이용한 뒤집기

 

문자열 슬라이싱을 사용하면, 간단한 문법으로 문자열을 뒤집을 수 있다.

문법:

문자열[start:end:step]

 

[::-1] → 전체 문자열을 뒤에서부터(-1) 한 글자씩 가져온다.

var = "abcde"
print(f"문자열 뒤집기: {var[::-1]}")  # edcba

 

출력 결과

문자열 뒤집기: edcba

 

🔹 2) reverse() 함수를 사용한 방법 (리스트 변환 후 처리)

 

문자열은 불변(immutable) 자료형이므로, 리스트로 변환 후 reverse() 메서드를 적용해야 한다.

var = "abcde"
lst = list(var)  # 문자열을 리스트로 변환
print(f"뒤집기 전: {lst}")  # ['a', 'b', 'c', 'd', 'e']

lst.reverse()  # 리스트 뒤집기
print(f"뒤집기 후: {lst}")  # ['e', 'd', 'c', 'b', 'a']

# 다시 문자열로 변환
reversed_str = "".join(lst)
print(f"문자열 변환: {reversed_str}")  # edcba

 

출력 결과

뒤집기 전: ['a', 'b', 'c', 'd', 'e']
뒤집기 후: ['e', 'd', 'c', 'b', 'a']
문자열 변환: edcba

 

🔹 3) sorted() 내장함수를 사용한 방법

 

sorted(iterable, reverse=True) 함수는 리스트로 변환되므로, 다시 문자열로 변환해야 한다.

var = "abcde"
srt = sorted(var, reverse=True)  # 리스트로 반환
print(f"sorted 사용: {srt}")  # ['e', 'd', 'c', 'b', 'a']

# 다시 문자열로 변환
sorted_str = "".join(srt)
print(f"sorted 문자열 변환: {sorted_str}")  # edcba

 

출력 결과

sorted 사용: ['e', 'd', 'c', 'b', 'a']
sorted 문자열 변환: edcba

 

📌 실전 연습: 백준 6438번 (문자열 뒤집기) 📌

 

🔗 문제 링크: 백준 6438번 - Reverse

 

🔹 문제 설명

여러 개의 문자열을 입력받고, 각 줄을 거꾸로 출력하는 프로그램을 작성하세요.

첫 번째 줄에 테스트 케이스 개수(N) 가 주어집니다.

이후 N개의 줄에 최대 70자 문자열이 주어집니다.

각 줄의 문자열을 뒤집어 출력해야 합니다.

 

🔹 코드 구현

#테스트 사례 수 지정 정수 입력
no = int(input())

#최대 70자를 포함하는 단일 텍스트 줄 입력
lst = [input() for _ in range(0, no)]

#문제풀이, 주어진 텍스트의 방향을 변경
for i in range(0, len(lst)):
    str = lst[i]
    print(str[::-1]) #문자열 슬라이싱으로 처리

 

입출력 예시

입력:
3
hello
world
python

출력:
olleh
dlrow
nohtyp

 

📌 실전 연습: 백준 1251번 (문자열 나누고 뒤집기) 📌

 

🔗 문제 링크: 백준 1251번 - 단어 나누기

 

🔹 문제 설명

주어진 단어를 세 부분으로 나눈 뒤, 각각 뒤집고 합쳐서 가장 사전순으로 앞서는 단어를 출력하세요.

예를 들어 "arrested" 라는 단어가 주어졌다면,

ar / rest / ed 로 나누고

각각 뒤집어서 ra / tser / de

합치면 "ratserde"

이렇게 가능한 모든 경우를 만들고, 가장 사전순으로 앞선 단어를 출력하면 됩니다.

 

🔹 코드 구현

#입력값 저장
inp = input()

#출력값 변수 선언
rtnList = []

# 단어를 3개로 나누는 모든 경우의 수를 탐색한다.
for i in range(1, len(inp)-1):
    for j in range(i+1, len(inp)):
        # 세 부분으로 나누고 각각 뒤집기한다.
        fStr = inp[:i]
        sStr = inp[i:j]
        tStr = inp[j:]
        
        #거꾸로 저장한다.
        rtnList.append(fStr[::-1]+sStr[::-1]+tStr[::-1])

#결과 출력
print(min(rtnList))

 

입출력 예시

입력:
arrested

출력:
ratserde

 

✅ 정리 & 마무리

 

문자열을 뒤집는 3가지 방법

1️⃣ 슬라이싱 ([::-1]) - 가장 간단하고 빠른 방법이다.

2️⃣ 리스트 변환 후 reverse() 사용 - 원본 리스트 변경 가능.

3️⃣ sorted() 사용 - 리스트로 변환된다. (다시 문자열 변환 필요)

 

백준 문제로 실전 연습

📌 백준 6438번 → 여러 줄 입력받아 문자열 뒤집기

📌 백준 1251번 → 문자열을 세 부분으로 나눠 뒤집고 사전순 정렬