<문제 설명>
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를 들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
<제한 사항>
n은 10,000,000,000이하인 자연수입니다.
<해결 과정>
처음에는 배열을 두개 사용하여 이중 for 문을 이용하려고 했었습니다.
예를 들면
class Solution {
public int[] solution(long n) {
이렇게 있을 때 n 의 값이 12345로 들어오면 그 값을 나누어 배열에 저장하고
answer배열을 생성한 후 이중 for문으로 n 값의 배열은 뒤에서부터 가져오고 그 값을
answer의 0번째부터 넣게 하여 뒤집으려고 하였습니다.
하지만 해당 방법은 너무 효율성이 떨어진다는 판단에 생각을 바꿨습니다.
들어오는 수의 값을 문자열로 바꾸고 해당 값의 길이를 구하여 answer 배열을 생성하였습니다.
그 후 for문을 사용하여 아스키값을 문자 '0'을 뺀 값을 answer의 0번째 부터 넣게 하였습니다.
자세한 설명은 아래 노트 설명 봐주세요 ^^
<나의 코드>
class Solution {
public int[] solution(long n) {
//1. 배열의 길이를 구하기 위해 문자로 변환 ex) n=12345 일때 4개의 배열 필요
String str = String.valueOf(n);
int[] answer = new int[str.length()];
System.out.println(str.length());
//for문을 이용해서 뒤에서부터 시작하여 처음까지 반복
for(int i=str.length()-1;i>=0;i--){
answer[str.length()-1-i] = str.charAt(i)-'0';
}
return answer;
}
}
<느낀 점>
다른 사람의 코드를 보면 StringBuilder를 사용하여 문제를 푼 부분이 있어 장점을 정리해 보았습니다.
class Solution {
public int[] solution(long n) {
String s = String.valueOf(n);
StringBuilder sb = new StringBuilder(s);
sb = sb.reverse();
String[] ss = sb.toString().split("");
int[] answer = new int[ss.length];
for (int i=0; i<ss.length; i++) {
answer[i] = Integer.parseInt(ss[i]);
}
return answer;
}
}
StringBuilder는 문자열을 조작할 때 사용되는 클래스로, 문자열을 효율적으로 처리하기 좋다고 합니다.
1. 가변성: StringBuilder는 가변성이 장점입니다.
즉, 기존 문자열에 추가하거나 삭제할 수 있습니다. 이는 문자열을 다룰 때 메모리의 효율성을 높이고 성능을 향상할 수 있습니다.
2. 성능: StringBuilder는 내부적으로 가변 크기 버퍼를 사용하여 문자열 조작을 수행합니다.
이는 문자열을 반복적으로 조작해야 할 때 많은 메모리 복사를 피하고 성능을 향상시킬 수 있습니다.
따라서 문자열 연결, 삽입, 삭제 등의 작업에서 StringBuilder를 사용하는 것이 좋다고 합니다.
3. 스레드 안정성: StringBuilder는 단일 스레드 환경에서 안전하게 사용할 수 있습니다.
여러 스레드가 동시에 StringBuilder를 조작하는 경우 동기화를 직접 처리해주어야 하기 때문에 멀티스레드 환경에서는 StringBuilder 대신 StringBuffer를 사용하는 것이 안전한 것 같습니다.
4. 메서드 체이닝: StringBuilder는 메서드 체이닝을 지원하여 여러 작업을 연속적으로 수행할 수 있다는 부분이 가장 인상 깊었습니다.
이는 코드의 가독성을 높이고 작업을 간결하게 표현할 수 있다고 합니다.
따라서 StringBuilder를 사용하면 문자열 조작에 효율적이고 성능이 좋으며 코드의 가독성을 높일 수 있기 때문에
다음번 문자열을 사용할 때에 StringBuilder를 이용하면 좋을 것 같습니다.
오늘도 수고하셨습니다 😄

'주니어 기초 코딩공부 > JAVA_programmers_코딩테스트' 카테고리의 다른 글
[PCCE] 프로그래머스 자바 기초 01 문자 출력 (0) | 2024.09.19 |
---|---|
자바 HashSet을 활용한 문제 풀이 (0) | 2023.07.07 |
문자열 내 p와 y의 개수_programmers_lev01_toCharArray (2) | 2023.06.30 |
자릿수 더하기_programmers_lev01_정수의 합 (0) | 2023.06.20 |
짝수와 홀수_programmers_lev01_삼항 연산자 (0) | 2023.06.20 |