인생자취

일치하는 문자열을 내림차순으로 정렬하기 본문

개발/Dev | 코딩테스트

일치하는 문자열을 내림차순으로 정렬하기

hnhnhun 2023. 5. 28. 16:25

문자열이 숫자로만 이루어진 조건에서 두 문자열이 일치하는 수만큼을 출력 하는 경우가 존재하고, 그 숫자들이 반환될 때 내림차순으로 정렬되어 반환되어야 한다고 가정해보자. 이와 관련하여 문제 해결 방법을 떠올리는 것은 다음과 같다.

 

[아이디어 1] 문자열을 비교할 때 내림차순으로 비교 ; for(int i=9, i>=0, i--)

- valueOf : String.valueOf(int a)를 사용하여 int 값을 문자열로 변환한다. 반복자를 문자열로 반환한다. 이와 같은 리턴값을 내는 메서드는 Integer의 toString(int i)이 있다.

public static String valueOf​(int i)

- charAt : 특정 위치의 문자열을 확인할 때, char 타입으로 반환하는 String의 charAt method를 사용한다.

public char charAt​(int index)

 

[아이디어 2] 특정 문자열이 포함된 개수를 센다.

- split : regex에 문자열을 파라미터로 하고, limit 개수 만큼을 String array로 생성한다. 그런데 limit에 음수를 대입하면 특정 문자열이 있는 부분을 잘라서 String array에 원소로 대입된다. 이때, String타입 array의 길이에서 1을 뺀 값이 특정 문자열이 있는 개수와 일치함을 활용한다.

public String[] split(String regex, int limit)

 

[아이디어 3] 중복된 문자열의 수가 2개 이상인 경우에는 repeat method를 사용한다.

- repeat : count 파라미터만큼 문자열을 반복해서 반환한다.

따라서 원하는 개수만큼 최종 반환하는 값에 추가한다. 

public String repeat​(int count)

 

문제을 제출한 이후에 내용을 정리하면서 string 연산을 하는 부분에서 메모리 이슈가 발생할 수도 있다는 것을 알게 되었다. 본 내용은 제한사항이 10개의 반복자에 한해서 문자열을 추가한 것이다. 하지만 문자열 연산을 더 빈번하게 사용하게 되는 경우에는 StringBuilder를 사용해야 성능에 더 유리한 로직이 된다.

- StringBuilder : 변경 가능한 문자열을 다룰 때 사용하는 클래스다. 혹시 몰라서 stringbuilder를 사용하여 로직을 수정해보니, 성능이 확연하게 차이나는 것을 발견했다.

public StringBuilder​(String str)

public StringBuilder append​(String str)

성능 비교는 다음과 같다.

         String을 + 연산                                                                                                  StringBuilder 사용

Stringbuilder를 사용하여 append로 문자열을 추가한 경우에 성능이 확실히 개선되긴 했다.

 

코딩테스트 문제를 풀 때 사용한 개념들을 정리해봤다. 아이디어의 흐름을 이해하고, 아이디어마다 사용되는 method를 적절하게 사용하여 문제에서 요구하는 개념을 바로 인지할 수 있도록 더 연습해야 할 것이다.

 

참고문헌 : api documentations Java

Comments