
이 문제는 딱히 중요해 보이진 않았지만 reverse()라는 존재를 잊지 않기 위해 블로그에 남긴다.
사실 나는 reverse()를 사용하지 않았을 뿐더러 불필요한 arr배열까지 만들어서 반복해야 하는 수를 담기 까지 했는데
가장 정제된 코드로 reverse()를 사용했을 때와 안 했을 때를 비교해보자.
class Solution {
public String solution(int[] food) {
StringBuilder sb = new StringBuilder();
// 왼쪽
for (int i = 1; i < food.length; i++) {
for (int j = 0; j < food[i] / 2; j++) {
sb.append(i);
}
}
// 물
sb.append(0);
// 오른쪽
for (int i = food.length - 1; i >= 1; i--) {
for (int j = 0; j < food[i] / 2; j++) {
sb.append(i);
}
}
return sb.toString();
}
}
이건 사용하지 않았을 때다. arr을 제거한 대신 범위에 food[i] / 2를 사용한 것이다.
class Solution {
public String solution(int[] food) {
StringBuilder left = new StringBuilder();
// 왼쪽만 생성
for (int i = 1; i < food.length; i++) {
for (int j = 0; j < food[i] / 2; j++) {
left.append(i);
}
}
// 오른쪽은 왼쪽을 뒤집어서 생성
StringBuilder right = new StringBuilder(left).reverse();
return left.append(0).append(right).toString();
}
}
이렇게 하면 유사하지만 반대로 동작하는 반복문을 사용할 필요가 없어진다.
left를 만들고 left를 뒤집은 right를 정의한 후 return할 때 left + 0 + right 하면 더 간단한 코드를 완성시킬 수 있다.
'PS' 카테고리의 다른 글
| [프로그래머스] 주식가격 (0) | 2026.07.10 |
|---|---|
| [프로그래머스] 숫자 문자열과 영단어 (0) | 2026.07.07 |
| [프로그래머스] 시저 암호 (0) | 2026.06.30 |
| [프로그래머스] 이상한 문자 만들기 (0) | 2026.06.25 |
| [프로그래머스] 최대공약수와 최소공배수 (0) | 2026.06.23 |