728x90
문제
문자열을 뒤집는 함수를 작성하라. 입력값은 문자 배열이며, 리턴 없이 리스트 내부를 직접 조작하라.
예제1
입력
["h", "e", "l", "l", "o"]
출력
["o", "l", "l", "e", "h"]
예제2
입력
["H", "a", "n", "n", "a", "h"]
출력
["h", "a", "n", "n", "a", "H"]
풀이1 투 포인터를 이용한 전통적인 방식의 풀이
투 포인터에 대해서 간단히 설명하자면, 단어 그대로 2개의 포인터를 이용해 범위를 조정해가며 풀이하는 방식을 말한다. 여기서는 점점 더 범위를 좁혀 가며 스왑하는 형태로 풀이할 수 있다. 문제에서 '리턴 없이 리스트 내부를 직접 조작하라'는 제약 사항이 있으므로 다음과 같이 문자열 strs 내부를 스왑하는 형태로 풀이하면 된다.
전체 코드는 다음과 같다.
def solution(strs: list[str]) -> None:
left, right = 0, len(strs) - 1
while left < right:
strs[left], strs[right] = strs[right], strs[left]
left += 1
right -= 1
print(strs)
solution(list(input("문자열 입력: ")))
풀이2 파이썬다운 방식인 기본 내장 함수를 이용한 풀이
여기서 사용한 함수는 reverse( ), reversed( ), 문자열 슬라이싱인데 그 중 reverse( )는 리스트에만 제공된다. 만약 입력값이 문자열이라면 앞서 살펴본 바와 같이 문자열 슬라이싱을 사용할 수 있다. 슬라이싱은 리스트에도 사용할 수 있으며, 성능 또한 매우 좋다.
def solution(strs: list[str]) -> None:
s = []
# strs = list(reversed(strs)) # reversed() 함수를 사용
# strs.reverse() # reverse() 함수를 사용
s[:] = strs[::-1] # 문자열 슬라이싱 사용
print(s)
solution(list(input("문자열 입력: ")))
알게된 점
투 포인터를 이용하여 문자열을 스왑하는 방식
reverse( ) 함수와 reversed( ) 함수의 사용 방법
문자열 슬라이싱의 트릭(s[:]와 s)
공부할 것
투 포인터를 이용한 문제 풀어보기
728x90
'알고리즘 문제 풀이' 카테고리의 다른 글
[알고리즘 문제 풀이] 가장 긴 팰린드롬 부분 문자열 (0) | 2022.08.24 |
---|---|
[알고리즘 문제 풀이] 그룹 애너그램 (0) | 2022.08.19 |
[알고리즘 문제 풀이] 가장 흔한 단어 (0) | 2022.08.19 |
[알고리즘 문제 풀이] 로그 파일 재정렬 (0) | 2022.08.12 |
[알고리즘 문제 풀이] 유효한 팰린드롬 (0) | 2022.08.12 |