https://school.programmers.co.kr/learn/courses/30/lessons/134240
제한사항
2 ≤ food의 길이 ≤ 9
1 ≤ food의 각 원소 ≤ 1,000
food에는 칼로리가 적은 순서대로 음식의 양이 담겨 있습니다.
food[i]는 i번 음식의 수입니다.
food[0]은 수웅이가 준비한 물의 양이며, 항상 1입니다.
정답의 길이가 3 이상인 경우만 입력으로 주어집니다.
Key point : 가운데 값을 0으로 하는 팰린드롬. 연산 횟수를 어떻게 줄일 수 있을까.
풀이 방법 :
1. String 배열을 만들고 마지막에 toString() 전략
2. lt, rt 투포인터로 양쪽에 하나씩 추가
나의 풀이
import java.util.*;
class Solution {
public String solution(int[] food) {
int sum = 1;
for(int i = 1; i < food.length; i++) {
if(food[i] % 2 != 0){
food[i] = food[i] - 1;
}
sum += food[i];
}
String[] str = new String[sum];
str[sum/2] = "0";
int lt = 0, rt = str.length - 1;
for(int i = 0; i < food.length; i++) {
int cnt = 0;
while(cnt < (food[i] / 2)) {
str[lt] = (i)+"";
str[rt] = (i)+"";
lt++;
rt--;
cnt++;
}
}
StringBuilder sb = new StringBuilder();
for(String x : str) {
sb.append(x);
}
return sb.toString();
}
}
코드가 굉장히 길다...
다른 사람의 풀이
class Solution {
public String solution(int[] food) {
StringBuilder builder = new StringBuilder();
for (int i=1; i<food.length; i++) {
int result = food[i] / 2;
builder.append(String.valueOf(i).repeat(result));
}
String answer = builder + "0";
return answer + builder.reverse();
}
}
개인적으로, 나처럼 String[] 배열을 만드는 것보다, 이렇게 바로 StringBuilder로 repeat, reverse 활용하는 것이 깔끔하다!
그런데, 코테에서 그런 메소드가 생각안나면 구현하는 수밖에..
'프로그래밍 > 알고리즘' 카테고리의 다른 글
[알고리즘 - 프로그래머스] 햄버거 만들기 Java (0) | 2024.04.01 |
---|---|
[알고리즘 - 프로그래머스] 과일장수 Java (0) | 2024.03.28 |
[알고리즘 - 프로그래머스] 기사단원의 무기 Jav (0) | 2024.03.28 |
[알고리즘 - 프로그래머스 고득점 Kit] 기능개발 Java (1) | 2024.03.14 |
[알고리즘 - 프로그래머스] [PCCE 기출문제] 9번 / 이웃한 칸 (1) | 2024.03.05 |