일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- AI 경진대회
- Real or Not? NLP with Disaster Tweets
- gs25
- hackerrank
- ChatGPT
- 백준
- 금융문자분석경진대회
- github
- 맥북
- Docker
- 캐치카페
- 파이썬
- dacon
- PYTHON
- 자연어처리
- 데이콘
- Baekjoon
- leetcode
- 코로나19
- 프로그래머스
- programmers
- 프로그래머스 파이썬
- ubuntu
- 편스토랑 우승상품
- 우분투
- Git
- Kaggle
- SW Expert Academy
- 편스토랑
- 더현대서울 맛집
- Today
- Total
솜씨좋은장씨
[leetCode] 796. Rotate String (Python) (feat.ChatGPT) 본문
[leetCode] 796. Rotate String (Python) (feat.ChatGPT)
솜씨좋은장씨 2023. 3. 28. 21:13
코딩 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