문제
https://school.programmers.co.kr/learn/courses/30/lessons/134240
나의 풀이
class Solution {
public String solution(int[] food) {
String answer = "";
String member1 = "";
String member2 = "";
for (int i = 1; i < food.length; i++) {
String tmp = "";
for (int j = 0; j < food[i] / 2; j++) {
tmp += i;
}
member1 += tmp;
member2 = tmp + member2;
}
answer = member1 + "0" + member2;
return answer;
}
}
2중 중첩이므로 시간 복잡도는 O(n²/2)이고 이차이다.
근데 String 객체로 연산을 하면 새로운 객체를 만들고 가비지 컬렉터가 생기기 때문에 더 오래걸려서 StringBuilder를 사용하여 다시 작성해보았다.
class Solution {
public String solution(int[] food) {
StringBuilder answer = new StringBuilder();
StringBuilder member1 = new StringBuilder();
StringBuilder member2 = new StringBuilder();
for (int i = 1; i < food.length; i++) {
StringBuilder tmp = new StringBuilder();
for (int j = 0; j < food[i] / 2; j++) {
tmp.append(i);
}
member1.append(tmp);
member2.insert(0, tmp);
}
answer.append(member1);
answer.append("0");
answer.append(member2);
return answer.toString();
}
}
두 개의 채점 결과이다.
왼쪽은 String 객체 연산이고 오른쪽은 StringBuilder 사용한 테스트다. 그냥 압도적인 속도차이를 보여준다...
아묻따 StringBuilder를 사용하자.
'알고리즘 & 문제 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 콜라 문제(java) (0) | 2023.02.03 |
---|---|
[프로그래머스] 옹알이(java) (0) | 2023.02.03 |
[프로그래머스] 과일 장수(java) (0) | 2023.02.03 |
[프로그래머스] 기사단원의 무기(java) (1) | 2023.02.03 |
[프로그래머스] 로또의 최고 순위와 최저 순위(java) (0) | 2023.02.02 |