https://school.programmers.co.kr/learn/courses/30/lessons/134240
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
📚문제
3가지의 음식이 준비되어 있으며, 칼로리가 적은 순서대로 1번 음식을 3개, 2번 음식을 4개, 3번 음식을 6개 준비했으며, 물을 편의상 0번 음식이라고 칭한다면, 두 선수는 1번 음식 1개, 2번 음식 2개, 3번 음식 3개씩을 먹게 되므로 음식의 배치는 "1223330333221"이 됩니다. 따라서 1번 음식 1개는 대회에 사용하지 못합니다.
수웅이가 준비한 음식의 양을 칼로리가 적은 순서대로 나타내는 정수 배열 food가 주어졌을 때, 대회를 위한 음식의 배치를 나타내는 문자열을 return 하는 solution 함수를 완성해주세요.
✏️ 내 풀이
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
class Solution {
public String solution(int[] food) {
List<Integer> arrays = new ArrayList<>();
for (int i = 0;i < food.length; i++) {
for (int j = 0; j < food[i] / 2; j++) {
arrays.add(i);
}
}
List<Integer> reversed = new ArrayList<>(arrays);
Collections.reverse(reversed);
arrays.add(0);
arrays.addAll(reversed);
String result = "";
return arrays.stream().map(String::valueOf).collect(Collectors.joining());
}
}
코딩테스트에서 익숙하게 쓰였던 리스트를 이용해서 풀었는데 +1 점밖에 받지 못했다.
그 이유는 비효율적인 메소드를 많이 가져와 실행 속도가 늦어져 성능이 떨어졌기 때문인거 같다.
✏️ 좋은 풀이
class Solution {
public String solution(int[] food) {
StringBuilder build = new StringBuilder();
for(int i=1; i<food.length; i++) {
for(int q=0; q<food[i]/2; q++) {
build.append(i);
}
}
String answer = build.toString()+"0"+build.reverse().toString();
return answer;
}
}
StringBuilder 를 다룬적 없지만 다른 사람의 풀이를 참고했는데 훨씬 코드가 짧아지고 실행속도가 올라갔다.
✒️ 회고
- StringBuilder 를 한번 공부해봐야겠다. 이러한 String 관련 문제를 풀때 유용하게 쓰일 함수인거같다.
'코딩테스트 > Java' 카테고리의 다른 글
[Java]옹알이 (2) (0) | 2025.04.22 |
---|---|
[Java] 2016년 (0) | 2025.04.16 |
[Java]가장 가까운 같은 글자 (0) | 2025.03.28 |
[Java]숫자 문자열과 영단어 (0) | 2025.03.25 |
[Java]행렬의 덧셈 (0) | 2025.03.13 |