문제
https://school.programmers.co.kr/learn/courses/30/lessons/134240
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
풀이
대회를 위한 음식 배치를 하는 문제이다. 푸드 파이트 대회는 왼쪽, 오른쪽에서 음식을 먹는데 가운데를 기준으로 대칭이 좌측 우측 음식이 대칭되어야한다.
대칭이 되어야 하므로, 한쪽에 음식 배치만 끝나면 나머지는 뒤집으면 된다는 생각을 했다.
1. 1번의 음식부터 순회하면서, 절반만큼의 수만큼 음식의 번호를 문자열에 붙인다.
2. 원본 문자열과 뒤집은 문자열을 구하고, 중간에 "0"을 넣는다.
3. 문자열을 반환한다.
소스코드
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);
}
}
String origin = sb.toString();
String reverse = sb.reverse().toString();
sb = new StringBuilder();
sb.append(origin).append("0").append(reverse);
return sb.toString();
}
}
class Solution {
public String solution(int[] food) {
StringBuilder sb = new StringBuilder();
for (int i = 1; i < food.length; i++) {
sb.append(String.valueOf(i).repeat(food[i] / 2));
}
String origin = sb.toString();
String reverse = sb.reverse().toString();
sb = new StringBuilder();
sb.append(origin).append("0").append(reverse);
return sb.toString();
}
}
실행결과


성능비교
| 평균 실행 속도(ms) | 평균 메모리 사용량(MB) | |
| repeat 사용 x | 0.335 | 82.47 |
| repeat 사용 o | 0.0885 | 84.1 |
| 결과 | 74.5% 빨라짐 | 2% 사용량 증가 |
빨라진 이유?
repeat 메서드를 사용하지 않은 풀이는 StringBuilder 클래스의 append 메서드를 호출하는 비용이 계속 발생한다. 하지만 String의 repeat을 사용해서 한번에 문자열을 만들어서 붙여버리면, append 메서드를 한번만 호출해도 만들 수 있으며, 중간 작은 문자열 객체가 생성되지 않아 실행속도가 빠르다.
'Problem Solving > Programmers' 카테고리의 다른 글
| [Programmers] 나누어 떨어지는 숫자 배열 - Java (2) | 2025.08.10 |
|---|---|
| [Programmers] 나머지가 1이 되는 수 찾기 - Java (0) | 2025.08.09 |
| [Programmers] 숫자 짝꿍 - Java (0) | 2025.08.07 |
| [Programmers] 과일 장수 - Java (2) | 2025.08.06 |
| [Programmers] 기사단원의 무기 - Java (0) | 2025.08.05 |