푸드 파이트 대회 문제 해결하기
문제 설명
푸드 파이트 대회는 수웅이가 매달 열리는 음식 먹기 대회입니다. 선수들은 1대 1로 대결하며, 각 대결마다 주어지는 음식의 종류와 양이 다릅니다. 선수들은 주어진 음식을 일렬로 배치한 후, 한 선수는 가장 왼쪽에서부터, 다른 선수는 가장 오른쪽에서부터 음식을 먹습니다. 중앙에는 물이 있으며, 물을 먼저 마시는 선수가 승리합니다.
이 대회의 공정성을 위해, 두 선수는 음식의 종류와 양이 동일해야 하며, 음식을 먹는 순서도 같아야 합니다. 따라서 수웅이는 음식을 적절하게 준비해야 합니다. 여기서, 수웅이가 준비한 음식의 양을 기반으로 대회에 적합한 음식을 배치하는 방법을 찾는 것이 문제의 핵심입니다.
예시
예를 들어, 3가지 음식을 준비했다고 가정해 봅시다:
- 1번 음식: 3개
- 2번 음식: 4개
- 3번 음식: 6개
물은 편의상 0번 음식으로 간주합니다. 이 경우, 선수들은 다음과 같은 방식으로 음식을 먹게 됩니다:
- 1번 음식 1개
- 2번 음식 2개
- 3번 음식 3개
이런 배치에서 물을 포함한 음식의 배치는 "1223330333221"
이 됩니다. 즉, 1번 음식이 1개, 2번 음식이 2개, 3번 음식이 3개, 물(0번 음식)이 1개, 3번 음식이 다시 3개, 2번 음식이 2개, 1번 음식이 1개 배치되는 형식입니다.
코드 구현
다음은 위 문제를 해결하기 위한 Java 코드입니다:
package lv1.푸드파이터대회;
class Solution {
public String solution(int[] food) {
StringBuilder sb = new StringBuilder();
// 각 음식의 반을 계산하여 문자열에 추가
for (int i = 1; i < food.length; i++) {
int foodCount = food[i] / 2;
String digit = String.valueOf(i).repeat(foodCount);
sb.append(digit);
}
String origin = sb.toString();
// 원본 문자열과 물(0)을 추가하고, 원본을 반전하여 추가
return origin + "0" + sb.reverse().toString();
}
public static void main(String[] args) {
var main = new Solution();
String result = main.solution(new int[]{1, 3, 4, 6});
System.out.println(result); // 결과 출력
}
}
코드 설명
- 음식 반복:
for
루프를 통해 음식 배열을 순회하면서 각 음식의 수를 반으로 나눈 값을 계산합니다. - 문자열 생성:
StringBuilder
를 사용하여 각 음식 번호를 반복하여 추가합니다.String.valueOf(i).repeat(foodCount)
를 사용하여 특정 음식을 몇 번 나타내야 하는지 쉽게 표현합니다. - 배치 완료: 원본 문자열과 물(0)을 포함하여 문자열을 완성한 후, 마지막으로 원본 문자열을 반전시켜 결과 문자열을 반환합니다.
결론
이 문제는 문자열 조작과 배열의 요소를 활용하여 공정한 대회 배치를 만드는 문제입니다. 간단한 반복문과 StringBuilder
의 활용을 통해 문제를 효율적으로 해결할 수 있습니다. 이와 같은 문제를 풀면서 배열과 문자열의 중요성을 다시 한 번 느낄 수 있었습니다. 여러분도 다양한 문제를 풀어보며 코딩 실력을 키워보세요!
'여러가지 > 알고리즘 & 자료구조' 카테고리의 다른 글
[LeethCode] 160번 Intersection of Two Linked Lists (0) | 2024.10.28 |
---|---|
[프로그래머스] 문자열 내마음대로 정렬하기 (3) | 2024.10.16 |
[프로그래머스] k번째수 (0) | 2024.10.16 |
[프로그래머스] 숫자 문자열과 영단어 (0) | 2024.10.16 |
[프로그래머스] 가장 가까운 같은 글자 (0) | 2024.10.16 |