반응형
프로그래머스 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] 부터 확인하면 된다.
두 사람이 양쪽에서 똑같은 음식을 먹도록 나열하는 것 이므로, 물을 기준으로 대칭이 된다.
그렇다면 왼쪽 사람이 먹는 순서를 대칭이되게 나열하면 오른쪽 사람이 먹는 순서라는 의미이다.
- 왼쪽 사람이 먹는 순서를 담기위해 StringBuilder 를 사용했다.
- food[0] 은 항상 물이므로 food[1] 부터 확인한다.
2.1. 둘이 똑같이 나눠야 하므로 해당 음식을 2로 나눠 몫만큼 StringBuilder에 넣어준다. - 현재 StringBuilder 에 들어있는 값은 왼쪽 사람이 먹는 음식이 나열되어 있으므로,
물(0) 을 추가하여 가운데에 배치한다. - 오른쪽 사람이 먹는 음식으로 대칭이 되도록 반대로 나열하여 답을 반환한다.
[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;
}
[채점 결과]
반응형