오늘의 Leetcode 연습문제는 Reverse String 이다.
아래 input과 output이 있다.
코드는 아래와 같다.
class Solution {
public void reverseString(char[] s) {
int left = 0;
int right = s.length - 1;
while (left < right) {
char temp = s[left];
s[left++] = s[right];
s[right--] = temp;
}
}
}
한 줄 한 줄 살펴 보겠다.
class Solution {
==> 클래스 이름은 Solution있다.
public void reverseString(char[] s) {
==> 메소드 이름은 reverseString 이고 input 은 char[] s 이며 return 값은 없다. 그냥 입력 String 을 reverse 하는 기능만 있다.
int left = 0; ==> left 라는 int 변수에 0을 대입한다.
int right = s.length - 1; ==> right 라는 int 변수에 입력 값 s의 맨 마지막 글자가 대입된다.
while (left < right) { ==> left 가 right 보다 작을 경우에만 실행하고 그렇지 않으면 while 문을 종료한다.
char temp = s[left]; ==> temp 라는 캐릭터에 s[left] 값을 대입한다.
s[left++] = s[right];
==> 이 부분을 잘 이해 해야 한다.
==> left++ 는 left = left+1과 같다. 첫번째는 left 가0이다. 그리고 left + 1을 하면 left 가 1이 된다.
==> 실행 순서는 s[0] = s[right]을 먼저 실행 한 다음에 left = left+1이 된다.
==> 그렇게 되면 s[0]에 s의 맨 마지막 값이 대입되고 난 후 left는 1이 된다.
==> 다음 while 문 돌 때는 left가 0 이 아니라 1 이 된다.
s[right--] = temp;
==> 이것도 마찬가지 right-- 는 right = right -1 과 같다.
==> 위에서 설명한 대로 s[right] = temp 가 먼저 실행 된다. 즉 s[right]에 s 의 맨 처음 값이 대입 된다.
}
}
}
While 문을 처음 되면은 s 의 처음 값이 맨 마지막으로 가고 맨 마지막 값이 맨 처음으로 오게 된다.
두번째 while 문에서는 s의 두번 째 값이 끝에서 두번째로 가고 끝에서 두번째 값이 두번째로 오게 된다.
이 while 문은 배열의 중간까지 오게 되면 left가 right보다 작지 않으므로 멈춘다.
그러므로 배열의 중간을 기준으로 reverse 되게 된다.
즉 해당 requirement를 충족하게 된다.
파이썬에서는 아주 간단하게 해결 할 수 있다.
class Solution:
def reverseString(self, s):
s.reverse()
Recursive 기능을 구현한 Helper를 사용해서 아래와 같이 코딩을 할 수 있다.
class Solution {
public void helper(char[] s, int left, int right) {
if (left >= right) return;
char tmp = s[left];
s[left++] = s[right];
s[right--] = tmp;
helper(s, left, right);
}
public void reverseString(char[] s) {
helper(s, 0, s.length - 1);
}
}
helper 메소드 내에서 자신을 호출함으로서 루프 효과를 내고 있다.
String을 reverse 하는 로직을 똑 같다.
파시썬으로는 아래와 같이 할 수 있다.
class Solution:
def reverseString(self, s):
def helper(left, right):
if left < right:
s[left], s[right] = s[right], s[left]
helper(left + 1, right - 1)
helper(0, len(s) - 1)
'etc. > Leetcode' 카테고리의 다른 글
Leetcode - 13. Roman to Integer - Easy (0) | 2022.08.08 |
---|---|
Leetcode - 9. Palindrome Number - Easy (0) | 2022.08.06 |
미국 테크니컬 인터뷰 문제 풀이 - Reverse words in a sentence. (0) | 2022.08.03 |
Iterator basic (0) | 2022.07.31 |
Leetcode - 242. Valid Anagram : Easy (0) | 2022.07.31 |
Leetcode - 442. Find All Duplicates in an Array (0) | 2022.07.26 |
JAVA - Find duplicate letters in a String (0) | 2022.07.26 |
JAVA - String Revers Sample (0) | 2022.07.25 |
Leetcode 541. Reverse String 2 - Easy (0) | 2022.07.22 |
Leetcode 118. Pascal's Triangle (Easy) (0) | 2022.07.20 |