카테고리 없음

[프로그래머스] 푸드 파이트 대회 (Java, Python)

garamdev 2026. 9. 5.
728x90

문제

https://school.programmers.co.kr/learn/courses/30/lessons/134240

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

코드(Java)

class Solution {
    public String solution(int[] food) {
        StringBuilder left = new StringBuilder();
        
        for (int i = 1; i < food.length; i++) {
            int count = food[i] / 2;
            for (int j = 0; j < count; j++) {
                left.append(i);
            }
        }
        
        // 가운데 '0'을 넣고, 오른쪽은 left를 뒤집어서 붙임
        StringBuilder result = new StringBuilder();
        result.append(left);
        result.append("0");
        result.append(left.reverse());
        
        return result.toString();
    }
}
  • 자바에서는 문자열을 계속 더하면 성능이 떨어지기 때문에 `StringBuilder` 사용함
  • `append()`는 문자열을 효율적으로 붙여주는 메서드
  • `revers()`는 문자열을 뒤집어줌
  • 마지막에 `toString()`으로 일반 문자열로 변환

코드(Python)

def solution(food):
    # 리스트에 담았다가 마지막에 join으로 합치면 성능이 좋아짐
    left_side = []
    for i in range(1, len(food)):
        left_side.append(str(i) * (food[i] // 2))
    left = ''.join(left_side)
    return left + '0' + left[::-1]
  • 파이썬에서 문자열은 불변(immutable)이라 `+=`로 문자열을 계속 붙이면, 매번 새로운 문자열을 만들기 때문에 비효율적!
  • 그래서 `list`에 먼저 모아두고 `''.join()`으로 합치면 훨씬 빠름
  • `[::-1]`은 문자열을 뒤집는 파이썬 문법 예: `"123"[::-1] → "321"`