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

2024. 10. 16. 16:44·여러가지/알고리즘 & 자료구조

푸드 파이트 대회 문제 해결하기

문제 설명

푸드 파이트 대회는 수웅이가 매달 열리는 음식 먹기 대회입니다. 선수들은 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);  // 결과 출력
    }
}

코드 설명

  1. 음식 반복: for 루프를 통해 음식 배열을 순회하면서 각 음식의 수를 반으로 나눈 값을 계산합니다.
  2. 문자열 생성: StringBuilder를 사용하여 각 음식 번호를 반복하여 추가합니다. String.valueOf(i).repeat(foodCount)를 사용하여 특정 음식을 몇 번 나타내야 하는지 쉽게 표현합니다.
  3. 배치 완료: 원본 문자열과 물(0)을 포함하여 문자열을 완성한 후, 마지막으로 원본 문자열을 반전시켜 결과 문자열을 반환합니다.

결론

이 문제는 문자열 조작과 배열의 요소를 활용하여 공정한 대회 배치를 만드는 문제입니다. 간단한 반복문과 StringBuilder의 활용을 통해 문제를 효율적으로 해결할 수 있습니다. 이와 같은 문제를 풀면서 배열과 문자열의 중요성을 다시 한 번 느낄 수 있었습니다. 여러분도 다양한 문제를 풀어보며 코딩 실력을 키워보세요!

저작자표시 (새창열림)

'여러가지 > 알고리즘 & 자료구조' 카테고리의 다른 글

[LeethCode] 160번 Intersection of Two Linked Lists  (0) 2024.10.28
[프로그래머스] 문자열 내마음대로 정렬하기  (4) 2024.10.16
[프로그래머스] k번째수  (0) 2024.10.16
[프로그래머스] 숫자 문자열과 영단어  (0) 2024.10.16
[프로그래머스] 가장 가까운 같은 글자  (0) 2024.10.16
'여러가지/알고리즘 & 자료구조' 카테고리의 다른 글
  • [LeethCode] 160번 Intersection of Two Linked Lists
  • [프로그래머스] 문자열 내마음대로 정렬하기
  • [프로그래머스] k번째수
  • [프로그래머스] 숫자 문자열과 영단어
hyeseong-dev
hyeseong-dev
안녕하세요. 백엔드 개발자 이혜성입니다.
  • hyeseong-dev
    어제 오늘 그리고 내일
    hyeseong-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (283)
      • 여러가지 (108)
        • 알고리즘 & 자료구조 (73)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (1)
      • 프레임워크 (39)
        • 자바 스프링 (39)
        • React Native (0)
      • 프로그래밍 언어 (39)
        • 파이썬 (31)
        • 자바 (3)
        • 스프링부트 (5)
      • 컴퓨터 구조와 운영체제 (3)
      • DB (17)
        • SQL (0)
        • Redis (17)
      • 클라우드 컴퓨팅 (2)
        • 도커 (2)
        • AWS (0)
      • 스케쥴 (65)
        • 세미나 (0)
        • 수료 (0)
        • 스터디 (24)
        • 시험 (41)
      • 트러블슈팅 (1)
      • 자격증 (0)
        • 정보처리기사 (0)
      • 재태크 (0)
        • 암호화폐 (0)
        • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    AWS
    #개발자포트폴리오 #개발자이력서 #개발자취업 #개발자취준 #코딩테스트 #항해99 #취리코 #취업리부트코스
    Spring Boot
    RDS
    DP
    Docker-compose
    java
    reactor
    ecs
    완전탐색
    Spring WebFlux
    SAA
    mybatis
    EC2
    시험
    파이썬
    OOP
    백준
    Redis
    FastAPI
    항해99
    docker
    celery
    spring
    WebFlux
    취업리부트
    자바
    프로그래머스
    그리디
    Python
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeseong-dev
[프로그래머스] 푸드 파이트 대회
상단으로

티스토리툴바