관리 메뉴

솜씨좋은장씨

[leetCode] 796. Rotate String (Python) (feat.ChatGPT) 본문

Programming/코딩 1일 1문제

[leetCode] 796. Rotate String (Python) (feat.ChatGPT)

솜씨좋은장씨 2023. 3. 28. 21:13
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 leetCode 의 Rotate String 입니다.

 

Rotate String - LeetCode

Can you solve this real interview question? Rotate String - Given two strings s and goal, return true if and only if s can become goal after some number of shifts on s. A shift on s consists of moving the leftmost character of s to the rightmost position.

leetcode.com

👨🏻‍💻 문제 풀이

입력받은 문자열 s 에서 뒤쪽부터 문자를 하나씩 pop 해온 뒤

pop 해온 값을 shift_word_list 에다가 append 합니다.

이 다음에 shift_word_list 를 join 하여 문자열로 만든 값과 pop 하고 남은 문자열 을 합쳐서 만든 값이

내가 원하는 목표 goal 문자열이 되었는지 확인하고

만약 goal 이 되었으면 멈추고 True 를 return 

goal 이 되지 않았으면 계속 pop -> 확인 -> pop -> 확인 을 반복하다가

문자열 s 에서 더이상 pop 할 값이 남아있지 않으면 while 반복문을 종료하고 False 를 return 하도록 하였습니다.

👨🏻‍💻 코드 ( Solution ) - SOMJANG

class Solution:
    def rotateString(self, s: str, goal: str) -> bool:
        answer = False
        s_list = list(s)

        shift_word_list = []

        while True:
            if goal == f"{''.join(shift_word_list)[::-1]}{''.join(s_list)}":
                answer = True
                break

            if not s_list:
                break

            shift_word_list.append(s_list.pop())

        return answer

👨🏻‍💻 코드 ( Solution ) - ChatGPT - 1회차 - 그냥 풀어줘!

class Solution:
    def rotateString(self, s: str, goal: str) -> bool:
        if len(s) != len(goal):
            return False

        for i in range(len(s)):
            if s == goal:
                return True
            s = s[1:] + s[0]

        return False

오늘도 역시 ChatGPT 에게도 풀어달라고 해보았습니다.

ChatGPT 는 pop 대신 slicing 을 통해 문제를 푼 것을 보고 또 아하 이렇게도 풀 수 있었지 라는 생각이 들었습니다.

이는 제가 풀었던 방법과 크게 다르지 않았습니다.

👨🏻‍💻 코드 ( Solution ) - ChatGPT - 2회차 - 조금 더 빠르고 메모리를 덜 이용하는 코드를 부탁해!

class Solution:
    def rotateString(self, s: str, goal: str) -> bool:
        if len(s) != len(goal):
            return False

        for i in range(len(s)):
            if s[i:] + s[:i] == goal:
                return True

        return False

이번에는 더 빠르고 더 메모리를 적게 이용하는 코드를 부탁해보았습니다.

그랬더니 s = s[1:] + s[0] 과정을 없애고 

if 문에서 s[i:] + s[:i] 를 통해서 바로 goal 인지 아닌지 확인하는 식으로 푸는 것을 보았습니다.

하지만! 이 방식도 엄청 드라마틱 하지는 않았습니다.

요 며칠 ChatGPT 에게 문제를 풀어보라고 하니

더 빠르고 메모리를 더 적게 사용하는 풀이는 어렵지만 

더 짧고 간결한 코드는 더 잘 작성하는 것 같은 느낌이었습니다.

 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

 

Comments