https://school.programmers.co.kr/learn/courses/30/lessons/134240
class Solution {
public String solution(int[] food) {
StringBuilder sb = new StringBuilder();
// i번째 음식의 크기만큼 루프를 돌며
for(int i = 1; i<food.length; i++){
// i번째 음식의 갯수 / 2 만큼 StringBuilder에 부착
for(int j = 0 ; j < food[i]/2 ; j++){
sb.append(i);
}
}
// 가운데에 0 부착
sb.append(0);
// 루프를 거꾸로 돌며
for(int i = food.length-1; i > 0; i--){
// i번째 음식의 갯수 / 2 만큼 StringBuilder에 부착
for(int j = 0 ; j < food[i]/2 ; j++){
sb.append(i);
}
}
// String으로 반환 후 리턴
return sb.toString();
}
}
0.03ms ~ 2.16ms
테스트 1 〉 통과 (0.88ms, 78.8MB)
테스트 2 〉 통과 (0.61ms, 76.3MB)
테스트 3 〉 통과 (0.56ms, 82.6MB)
테스트 4 〉 통과 (0.99ms, 77.6MB)
테스트 5 〉 통과 (0.34ms, 72.1MB)
테스트 6 〉 통과 (0.66ms, 74.4MB)
테스트 7 〉 통과 (0.98ms, 78.1MB)
테스트 8 〉 통과 (0.72ms, 74.1MB)
테스트 9 〉 통과 (0.75ms, 75.8MB)
테스트 10 〉 통과 (0.76ms, 69.6MB)
테스트 11 〉 통과 (0.03ms, 71.4MB)
테스트 12 〉 통과 (0.05ms, 77.6MB)
테스트 13 〉 통과 (0.03ms, 79.3MB)
테스트 14 〉 통과 (2.16ms, 78.9MB)
테스트 15 〉 통과 (0.05ms, 72.3MB)
테스트 16 〉 통과 (0.09ms, 71.9MB)
테스트 17 〉 통과 (0.03ms, 73.3MB)
테스트 18 〉 통과 (0.05ms, 72.2MB)
테스트 19 〉 통과 (0.03ms, 77.5MB)
테스트 20 〉 통과 (0.06ms, 76.9MB)
거꾸로 꺼낸다 > Stack이 생각나서 풀이해보았다!
import java.util.Stack;
class Solution {
public String solution(int[] food) {
StringBuilder sb = new StringBuilder();
Stack<Integer> stack = new Stack<>();
// StringBuilder에 부착 시 stack에도 값 넣기
for(int i = 1; i<food.length; i++){
for(int j = 0 ; j < food[i]/2 ; j++){
sb.append(i);
stack.push(i);
}
}
sb.append(0);
// Stack 크기 미리 지정
int size = stack.size();
// 거꾸로 꺼내면서 StringBuilder에 부착
for(int i = 0 ; i < size; i++){
sb.append(stack.pop());
}
return sb.toString();
}
}
테스트 1 〉 통과 (2.81ms, 74.4MB)
테스트 2 〉 통과 (2.08ms, 74.6MB)
테스트 3 〉 통과 (1.97ms, 77.8MB)
테스트 4 〉 통과 (2.60ms, 73.4MB)
테스트 5 〉 통과 (1.11ms, 72.7MB)
테스트 6 〉 통과 (2.42ms, 77.3MB)
테스트 7 〉 통과 (2.34ms, 78.1MB)
테스트 8 〉 통과 (2.47ms, 74.9MB)
테스트 9 〉 통과 (1.38ms, 77.7MB)
테스트 10 〉 통과 (1.54ms, 76MB)
테스트 11 〉 통과 (0.20ms, 75.4MB)
테스트 12 〉 통과 (0.21ms, 77.6MB)
테스트 13 〉 통과 (0.18ms, 73.9MB)
테스트 14 〉 통과 (3.57ms, 73.7MB)
테스트 15 〉 통과 (0.21ms, 77.4MB)
테스트 16 〉 통과 (0.19ms, 76.4MB)
테스트 17 〉 통과 (0.22ms, 79.4MB)
테스트 18 〉 통과 (0.14ms, 74.4MB)
테스트 19 〉 통과 (0.13ms, 72.1MB)
테스트 20 〉 통과 (0.27ms, 76.6MB)
class Solution {
public String solution(int[] food) {
String answer = "0";
for (int i = food.length - 1; i > 0; i--) {
for (int j = 0; j < food[i] / 2; j++) {
// 자기 자신 앞뒤로 i 부착
answer = i + answer + i;
}
}
return answer;
}
}
i를 앞뒤로 붙이는 방법을 사용했다!
class Solution {
public String solution(int[] food) {
StringBuilder builder = new StringBuilder();
for (int i=1 ; i<food.length ; i++) {
int result = food[i] / 2;
// repeat을 활용해 n번 반복하여 부착
builder.append(String.valueOf(i).repeat(result));
}
String answer = builder + "0";
return answer + builder.reverse(); // sb를 뒤집어서 부착하는 함수
}
}
참고
문자열a = 문자열.repeat(반복횟수)
참고
문자열a = 문자열.reverse()