2023. 2. 8. 01:32ㆍJava/java
백준 2751번 문제를 풀다가 시간 초과로 문제를 풀지못했습니다.
그래서 제가 알고 있는 방법으로는 도저히 이 문제를 해결할 방법을 찾지 못해서 결국 검색을 해봤습니다.
결과적으로 이 문제를 풀기위한 키포인트는 두가지가 있었습니다.
Arrays.sort()가 아닌 Collections.sort() 사용하기.
StringBuilder를 사용하기
Arrays.sort()와 Collections.sort()의 작동 원리가 서로 다르고 결과적으로 Collections.sort()가 더 빠르다고합니다.
그리고 StringBuilder는 처음 사용해보는 클래스여서 이번에 공부하게 되었습니다.
원래 String 클래스로 만든 문자열은 변경이 불가합니다. 그리고 이를 연산하는 과정도 메모리를 많이 사용하게 되어 성능의 저하를 유발하기도 합니다.
이러한 String의 문제점을 해결하기 위해 StringBuilder를 사용할 수가 있습니다.
StringBuilder는 변경이 가능한 문자열을 생성하는 것으로 String에 비해 메모리를 적게 할당하기 때문에 이를 사용하여 성능 향상을 기대할 수 있습니다.
StringBuilder에서 사용할 수 있는 메서드는 아래와 같습니다.
append(arg) | arg를 문자열에 더합니다 |
insert(int offset, arg) | offset의 위치에 arg를 더합니다 |
replace(int start, int end, Strng str) | start와 end 사이의 문자열을 str로 대체합니다. |
setCharAt(int index, Char arg) | index의 위치한 문자열을 char형 arg로 대체합니다 |
delete(int start, int end) | start에서 end 까지의 위치한 문자열을 삭제합니다 |
deleteCharat(int index) | index에 위치한 문자열을 삭제합니다 |
reverse() | 문자열의 순서를 반대로 합니다 |
toString() | String 자료형을 반환합니다 |
setLength(int arg) | 문자열의 길이를 arg로 만듭니다. |
여기서 replace()를 사용할때 start와 end를 같게하면 해당 위치에 값을 끼워넣을 수도있습니다. insert()와 같은 기능으로도 사용할 수 있습니다. 하지만 그럴거면 차라리 insert()를 사용합시다.
그리고 setLength()는 문자열의 길이가 arg보다 짧다면 arg만큼 문자열의 공백으로 채워줍니다.
반대로 문자열의 길이가 arg보다 길다면 나머지는 잘라버립니다.
Q.그래서 이번 글의 핵심은 뭔데?
01. StringBuilder를 사용하면 문자열의 연산으로 인해 메모리가 낭비되고 성능이 저하되는 것을 최소한으로 할 수 있다.
02. Arrays.sort()와 Collections.sort()는 서로 연산과정이 다르고 덕분에 Collections.sort()가 속도 측면에서 더 빠르다
'Java > java' 카테고리의 다른 글
Comparator<T> Interface 란? (0) | 2023.02.11 |
---|---|
StringTokenizer VS split() 둘을 비교해보자 (0) | 2023.02.07 |
4주차 - 메서드 method (2) , 스태틱 메서드 static method (0) | 2022.09.03 |
4주차 - 메서드 method (1) (0) | 2022.09.03 |
4주차 - 상속 inheritance (5), 인터페이스 interface (0) | 2022.09.03 |