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

반응형

프로그래머스 programmers Level1 푸드파이트 대회 - java

[문제]

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

 

프로그래머스

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

programmers.co.kr

 

[풀이]

문제에 제한사항이 다음으로 주어져 있다.

・  2 ≤ food의 길이 ≤ 9

・  1 ≤ food의 각 원소 ≤ 1,000

・   food  는 칼로리가 적은 순서대로 음식의 양이 담겨 있습니다.

   food[i]  는 i번 음식의 수입니다.

   food[0]  은 수웅이가 준비한 물의 양이며, 항상 1입니다.

・  정답의 길이가 3 이상인 경우만 입력으로 주어집니다.

 

food[0] 은 항상 1이며 물이다. 따라서 food[1] 부터 확인하면 된다.

두 사람이 양쪽에서 똑같은 음식을 먹도록 나열하는 것 이므로, 물을 기준으로 대칭이 된다.

그렇다면 왼쪽 사람이 먹는 순서를 대칭이되게 나열하면 오른쪽 사람이 먹는 순서라는 의미이다.

  1. 왼쪽 사람이 먹는 순서를 담기위해 StringBuilder 를 사용했다.
  2. food[0] 은 항상 물이므로 food[1] 부터 확인한다.
    2.1. 둘이 똑같이 나눠야 하므로 해당 음식을 2로 나눠 몫만큼 StringBuilder에 넣어준다. 
  3. 현재 StringBuilder 에 들어있는 값은 왼쪽 사람이 먹는 음식이 나열되어 있으므로,
    물(0) 을 추가하여 가운데에 배치한다.
  4. 오른쪽 사람이 먹는 음식으로 대칭이 되도록 반대로 나열하여 답을 반환한다.

 

[java 코드]

public String solution(int[] food) {
    String answer = "";
    StringBuilder sb = new StringBuilder();
    // 왼쪽 사람이 먹는 음식 나열
    for (int i = 1; i < food.length; i++) {
        for (int j = 1; j <= food[i] / 2; j++) {
            sb.append(i);
        }
    }
    answer = sb.toString();
    answer += "0"; // 물
    // 뒤집어서 오른쪽 사람이 먹는 음식 나열
    answer += sb.reverse().toString();
    return answer;
}

 

[채점 결과]

 

반응형