오늘의 공부 키워드

  • 1528 Suffle String

1528 Shuffle String

주어진 문자열 s와 정수 배열 indices가 있습니다. 문자열 s의 각 문자는 indices 배열의 값에 따라 재배열됩니다.
즉, s의 i번째 위치에 있는 문자는 indices[i] 위치로 이동합니다. 재배열된 문자열을 반환해야한다.

예시

  1. 예시 1:
    • 입력: s = "codeleet", indices = [4,5,6,7,0,2,1,3]
    • 출력: "leetcode"
    • 설명: "codeleet"의 각 문자는 인덱스 배열에 따라 "leetcode"로 재배열됩니다.
  2. 예시 2:
    • 입력: s = "abc", indices = [0,1,2]
    • 출력: "abc"
    • 설명: 각 문자가 제자리에서 움직이지 않으므로 결과는 "abc"입니다.

제약 조건

  • s.length == indices.length == n
  • 1 <= n <= 100
  • s는 소문자 영어 문자로만 구성됩니다.
  • 0 <= indices[i] < n
  • indices의 모든 값은 고유합니다.

해결 방법

이 문제를 해결하기 위해서는 다음 단계를 따릅니다:

  1. indices 배열의 각 위치에 맞게 문자를 재배열할 빈 문자열을 만듭니다.
  2. indices 배열을 순회하며 각 인덱스 위치에 s의 문자를 배치합니다.
  3. 재배열된 문자열을 반환합니다.

구체적인 알고리즘은 다음과 같습니다:

  1. 결과를 저장할 동일한 길이의 빈 리스트 shuffled를 만듭니다.
  2. indices 배열을 순회하면서, 각 indices[i] 위치에 s[i] 문자를 배치합니다.
  3. 리스트를 문자열로 변환하여 반환합니다

코드

from typing import List

class Solution:
    def restoreString(self, s: str, indices: List[int]) -> str:
        shuffled = [''] * len(s)
        for i, index in enumerate(indices):
            shuffled[index] = s[i]
        return ''.join(shuffled)

# 예제 테스트
sol = Solution()
s1 = "codeleet"
indices1 = [4, 5, 6, 7, 0, 2, 1, 3]
print(sol.restoreString(s1, indices1))  # "leetcode"

s2 = "abc"
indices2 = [0, 1, 2]
print(sol.restoreString(s2, indices2))  # "abc"

s3 = "aiohn"
indices3 = [3, 1, 4, 2, 0]
print(sol.restoreString(s3, indices3))  # "nihao"

 

코드 설명

 

  • shuffled 리스트를 s와 동일한 길이로 초기화합니다.
  • indices 배열을 순회하면서 각 인덱스 위치에 s의 문자를 배치합니다.
  • 최종적으로 리스트를 문자열로 변환하여 반환합니다.

오늘의 회고

 

  • 부족함을 느끼지만 실력을 늘리는것이 제일 빠른길임을 명심하자
  • 새로운 개념을 배울수 있어서 좋았다.
 

 

+ Recent posts