[Programmers / Level1] 134240. 푸드 파이트 대회 (Java)

이하얀·2024년 8월 6일
0

🕊️ 프로그래머스

목록 보기
25/47

💡 Info




입출력 조건




입출력 예시




문제 이해


  • 음식을 정렬하고, 가운데 0을 넣어 반환하면 되는 문제


알고리즘


풀이 시간 : 23분

  1. 음식 food 배열 오름차순 정렬
  2. 정렬한 food를 반으로 나누기(for문은 0~mid, mid~food.length로 나누면 됨)
  3. 나눈 앞부분의 배열에 0을 추가 + 뒷 배열 다시 붙여서 출력하기
import java.util.*;

class Solution {
    public String solution(int[] food) {
        String answer = "";
        
        Arrays.sort(food);
        
        int mid = food.length / 2;
        
        // 앞부분
        for(int i=0; i<food.length; i++){
            answer += food[i];
            String.valueOf(i).repeat(mid);
        }
        answer = answer + '0';
        
        //뒷부분
        for(int i=mid; i<food.length; i++){
            answer += food[i];
        }
        return answer;
    }
}


오답체크


  • 테스트 미통과 문제
    • 음식의 횟수 누적에 대한 코드 추가
    • 나눈 배열의 앞부분인 first, 뒷부분인 second 명시
    • String.valueOf 사용하는 대신 이중 for문으로 대체
    • 또한 first는 오름차순 정렬이나, second는 내림차순 정렬임을 고려해 for문을 거꾸로 실행
    • mid는 전역변수로 지정하지 않고 for문 안에서 food[i]/2로 진행
//before
Arrays.sort(food);

int mid = food.length / 2;
        
// 앞부분
for(int i=0; i<food.length; i++){
	answer += food[i];
    String.valueOf(i).repeat(mid);
}
answer = answer + '0';
        
//뒷부분
for(int i=mid; i<food.length; i++){
	answer += food[i];
}
//after        
Arrays.sort(food);
        
String first = "";
String second = "";

// 앞부분
for (int i = 1; i < food.length; i++) {
	for (int j = 0; j < food[i] / 2; j++) {
		first += i;
    }
}
first += '0';
        
//뒷부분
for (int i = food.length - 1; i > 0; i--) {
	for (int j = 0; j < food[i] / 2; j++) {
		second += i;
    }
}

  • 먼저 정렬을 할 경우, 테스트 2번 미통과 -> 정렬은 하지 않는 것으로 변경해 통과

    • 정렬 진행 시 테스트

    • 정렬 제거 시 테스트



최종 풀이


풀이 시간 : 55분(첫 풀이 시간 포함)

  1. 앞부분 배열과 뒷부분 배열을 나누어 for문 작성
  2. 앞부분 배열 : 1~food.length-1까지 증가 + '0' 추가
  3. 뒷부분 배열 : 거꾸로 정렬되어야 하기 때문에 food.length-1 ~ 1까지 감소
  4. answer : 0을 붙인 앞부분 배열 + 뒷부분 배열로 출력
import java.util.*;

class Solution {
    public String solution(int[] food) {
        
        //Arrays.sort(food);
        
        String first = "";
        String second = "";
        //int mid = food.length / 2;
        
        
        // 앞부분
        for (int i = 1; i < food.length; i++) {
            for (int j = 0; j < food[i] / 2; j++) {
                first += i;
            }
        }
        first += '0';
        
        //뒷부분
        for (int i = food.length - 1; i > 0; i--) {
            for (int j = 0; j < food[i] / 2; j++) {
                second += i;
            }
        }

        String answer = first + second;
        return answer;
    }
}


결과



🚨 참고할 풀이

iclass Solution {
    public String solution(int[] food) {
        // 음식을 순서대로 담을 StringBuilder 선언
        StringBuilder sb = new StringBuilder();
        
        for (int i = 1; i < food.length; i++) {
            // i번 음식을 2로 나눈 개수만큼 StringBuilder에 추가
            int count = food[i] / 2;
            sb.append(String.valueOf(i).repeat(count));
        }
        
        // StringBuilder에 추가된 음식에 0과 reverse된 문자열 더하기
        String answer = sb + "0";
        answer += sb.reverse();
        
        return answer;
    }
}
profile
언젠가 내 코드로 세상에 기여할 수 있도록, BE 개발 기록 노트☘️

0개의 댓글