Given a string, look for a mirror image (backwards) string at both the beginning and end of the given string. In other words, zero or more characters at the very begining of the given string, and at the very end of the string in reverse order (possibly overlapping). For example, the string "abXYZba" has the mirror end "ab".
mirrorEnds("abXYZba") → "ab"
mirrorEnds("abca") → "a"
mirrorEnds("aba") → "aba"
Solution
이번 문제는 주어지는 문자열에 대해 앞에서 시작하는 문자열과, 뒤에서 시작하는 문자열의 순서가 같은 만큼 반환하는 문제다. 같은 문자열이 없다면 빈 문자열을 반환하면 된다.
이 문제는 String 함수 중 하나인 chatAt 함수를 사용하여 문제를 풀어보았다. 반복문을 사용하여 처음부터 마지막까지의 문자열과, 맨 마지막에서부터 처음까지의 문자열을 차례대로 비교하고, 같을 때마다 String을 +연산을 통해 더해줌으로써 결과를 반환하였다.
Code


Used function
가장 많이 사용한 함수는 string.charAt함수이다. 이 함수에 대한 java library에 대한 설명은 다음과 같다.

입력받은 index에 해당하는 문자를 반환하며 다음과 같은 특징을 가진다.
1. index의 범위는 0~ length()-1 으로 배열 인덱싱과 같다.
2. 만약 입력받은 index가 String의 문자열 길이에 대한 범위를 넘어가게 되면, indexOutOfBoundsException error를 반환한다.
그리고, 여기에서 사용한 문자열의 연산 방법은 String 클래스의 + 연산자로, String class의 연산 과정이 어떻게 이루어지는지 알아보자.

String class가 가지는 특징은 불변 이라는 속성을 가지는 점이다.
위 그림에서 볼 수 있듯이 String을 하나 선언한 상태에서 +연산자를 통해 문자열을 더하는 과정을 진행하게 되면, 더해진 문자열은 새로운 메모리 영역을 가지게 됩니다. 그리고 이전에 할당되었던 메모리영역 은 Garbage로 남아있다가 자바의 GC(garbage collection)에 의해 사라지게 됩니다.
즉, String class는 불변 하기 때문에 문자열의 추가,수정,삭제등의 연산이 일어나는 시점에서 새로운 String 인스턴스가 생성된 것입니다.
그래서 String은 문자열을 추가, 수정, 삭제 등의 연산이 빈번하게 발생하는 알고리즘에 사용하게 되면 heap 메모리에 수많은 임시 Garbage가 생성되어 성능에 악영향을 끼칠 수 있다. 계속 Garbage가 언급되는데, 도대체 Garbage란 무엇일까.
가비지(Garbage)란, 더 이상 사용되지 않는 메모리 영역이다.
"더 이상 사용되지 않는다" 의 의미는 객체나 배열을 가리키는 레퍼런스가 하나도 없음을 의미한다.
위 그림에서도 볼 수 있듯이, 기존이 hello를 가리키던 str 레퍼런스가 새로운 객체를 가리키게 되면서 hello를 가리키는 객체가 Garbege 대상이 된다. 근데 Garbage를 회수하는 GC는 무엇일까.
가비지컬렉션(Garbage Collection)이란, Garbege를 회수하여 메모리 공간을 늘리는 작업이다. 그리고 이 일을 수행하는 것을
가비지 컬렉터(Garbege Collector)라고 한다.
이 가비지 컬렉터 역할은 자바 가상 기계(JVM)이 전용 스레드를 두고, JVM의 내부적인 알고리즘의 판단에 의해 가비지 컬렉션이 수행된다. 그래서 메모리에 Garbege가 쌓일 수 있고, 이로 인해서 성능에 악영향을 끼칠 수 있다.
출처: https://blog.steamedu123.com/entry/티스토리-서식-글-쓰기 [모두의 블로그]
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#charAt(int)
https://ifuwanna.tistory.com/221
https://madplay.github.io/post/java-garbage-collection
'CodingBat' 카테고리의 다른 글
| CodingBat Java: Array-3 (linearIn) (0) | 2021.10.17 |
|---|---|
| CodingBat Java: Logic-2 (evenlySpaced) (0) | 2021.10.07 |
| CodingBat Java: Warmup-2 (noTriples) (0) | 2021.09.30 |
| CodingBat Java: Warmup-1 (close 10) (0) | 2021.09.24 |