본문 바로가기

컴퓨터/프로그래머스

프로그래머스 - 134240번: 푸드 파이트 대회 [Java]

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

1. 코드

class Solution {
    public String solution(int[] food) {
        String answer = "";
        for(int i = 1; i < food.length; i++) {
            String num = String.valueOf(i);
            answer += num.repeat(food[i] / 2);
        }
        StringBuffer sb = new StringBuffer(answer);
        answer += "0" + sb.reverse().toString();
        return answer;
    }
}

2. 설명

문제에 대한 설명이 많이 길지만 자세히 읽고 정리하면 생각보다 내용은 간단합니다.

String answer = "";
for(int i = 1; i < food.length; i++) {
    String num = String.valueOf(i);
    answer += num.repeat(food[i] / 2);
}

물은 무조건 1잔만 배치되기에 1번 음식부터 접근합니다. 그리고 해당 음식에 대한 번호를 문자열로 변환하여 음식의 양(food[i])에서 2로 나눈 몫만큼 반복하여 문자열에 추가해 줍니다. 이렇게 한다면 왼쪽부터 음식을 먹는 선수의 음식 배치가 완료됩니다.

StringBuffer sb = new StringBuffer(answer);
answer += "0" + sb.reverse().toString();
return answer;

완성된 음식 배치에서 가운데에는 무조건 물이 배치되어야 하기에 "0"과 완성된 음식배치를 반대로 한다면 오른쪽 선수의 음식 배치이기에 반전시켜서 합쳐주면 정답이 됩니다.

3. 정리

  1. 물은 무조건 가운데 1개만 존재한다.
  2. 왼쪽의 선수 음식 배치부터 완성시킨다.
  3. 왼쪽 선수 음식 배치의 순서를 반대로 한 것은 오른쪽 선수의 음식 배치와 동일하다.
출처: 프로그래머스 코딩 테스트 연습, 
https://school.programmers.co.kr/learn/challenges