문제 출처 : 푸드 파이트 대회
공정성을 위해 두 선수가 먹는 음식의 종류와 양은 동일하고, 순서도 동일하다. 순서는 칼로리가 낮은 순으로 배치한다.
이미 food 배열안에 칼로리가 낮은 순서로 음식이 배치되어 있으며, food[0]
에는 물이 배치되어 있고 항상 1이다.
주어진 입출력과 문제에 나와있는 규칙을 바탕으로 관찰을 해보면 2가지 정보가 나왔다.
food[0]
을 제외한 나머지 원소들을 2로 나눈 후 그 몫만큼 반복하여 좌에서 우로가는 방향을 완성시킨 후 물을 배치한다. 그 다음 동일한 방법으로 우에서 좌로가는 방향을 완성시킨다. (다중 for문)
1번과 거의 유사한 방법이지만, 좌에서 우로 가는 방향에 대한 배치를 완성시킨 후 그 결과 값에 물에 배치와 좌에서 우로 가는 방향을 reverse()
하여 최종 결과를 완성시킨다.
이 2가지의 정보 중 1, 2번째 방법은 결국 문자열을 더해야하는 연산이 필요하기 때문에 StringBuilder
클래스를 사용해서 풀어야하고, StringBuilder
의 내장 함수는 reverse()
와 repeat()
함수를 사용해서 푸는 방법인 2번 방법을 이용해 풀 예정이다.
여기서 repeat 함수를 사용하게 되는데, 이는 아래의 소스와 동일한 기능을 하게 된다.
for (int i = 1; i < food.length; i++) {
for (int j = 0; j < food[i] / 2; j++) {
sb.append(i);
}
}
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));
}
return sb.toString() + "0" + sb.reverse().toString();
}
}