[프로그래머스] 푸드 파이트 대회

fsm12·2023년 6월 13일
0

프로그래머스

목록 보기
10/57
post-thumbnail
post-custom-banner

문제링크

문제 이해

[ 입력형태 / 조건 ]

food
food[0]은 물, 인덱스 1부터는 각각 요리의 개수를 저장한 배열 | [1, 3, 4, 6]

[ 문제 ]

=> 두명의 선수가 각각 맨 좌측, 우측으로부터 음식을 먹어야 하는데, 가장 중앙의 물을 먼저 먹는 선수가 이긴다. 1번 음식부터 차례대로 같은 개수로 먹을 수 있도록 배치하여 return

[ 풀이 ]

음식의 수를 저장하고, 1번 음식부터 양옆에 차례로 추가하기



코드

> [성공] 1차 시도 : char[] 이용

  • 생각한 풀이 그대로 구현
class Solution {
    public String solution(int[] food) {
        int size = 1;
        for(int i=1; i<food.length; i++){
            food[i] /= 2; 
            size += food[i];
        }
        size *= 2;
        
        char[] answer = new char[size-1];
        int point = 0;
        for(int idx=1; idx<food.length; idx++){
            for(int i=0; i<food[idx]; i++){
                answer[point] = Integer.toString(idx).charAt(0);
                answer[size-point-2] = Integer.toString(idx).charAt(0);
                point++;
            }
        }
        answer[point] = '0';
        return String.valueOf(answer);
    }
}

=> 완전히 느린건 아니지만 특정 테케에서 실행속도가 느렸음



> [성공] 2차 시도 : StringBuilder 이용

  • 큰 번호의 요리부터 0의 앞과 뒤에 추가
class Solution {
    public String solution(int[] food) {
        StringBuilder sb = new StringBuilder();
        sb.append(0);
        for(int idx=food.length-1; idx>0; idx--){
            for(int i=0; i<food[idx]/2; i++){
                sb.insert(0, idx);
                sb.append(idx);
            }
        }
        return sb.toString();
    }
}

=> insert(0,)을 통해 가장 앞에 추가하는 연산이 꽤나 실행속도를 많이 차지함을 알수있었음


TIP : String -> char[]는 문자열.toCharArray()로, char[] -> String은 String.valueOf(문자 배열)로 할 수 있다.

post-custom-banner

0개의 댓글