푸드 파이트 대회 (자바)

김재현·2023년 11월 18일
0

알고리즘 풀이

목록 보기
21/89
post-thumbnail
post-custom-banner

문제

나의 정답

    public String solution(int[] food) {
        String answer = "";

        int arrLen = 1;

        for(int i=1; i<food.length;i++) {
            if(food[i]%2==1) {
                food[i]=food[i]-1;
                arrLen+=food[i];
            } else {
                arrLen+=food[i];
            }
        }

        int[] intArr = new int[arrLen];

        int a = 0;

        for(int i=0;i<food.length-1;i++) {
            for(int j=0;j<food[i+1]/2;j++) {
                intArr[i+j+a]=i+1;
                intArr[arrLen-1-i-j-a]=i+1;
            }
            a+=food[i+1]/2-1;
        }

        for(int i=0;i< intArr.length;i++) {
            answer+=String.valueOf(intArr[i]);
        }

        return answer;

    }

복잡해지는 것이 싫어서 일단 food를 모두 짝수로 바꿨다. ( food[0] 빼고) -> food[x]/2 하면 x-1이 삽입되는 회수가 됨.
그러면서 동시에 답안의 총 길이인 arrLen을 입력했다. (항상 0이 하나 있으니 1로 초기화)

이것으로 int 배열을 만들어서 여기에 값 대입.

근데 앞, 뒤로 균일하게 들어가야하므로 intArr[x], intArr[arr-x] 를 생각해볼 수 있다.

(1) 여기서 intArr에 1을 food[1]/2 번 넣어야 하고,
그 다음엔 intArr에 삽입된 다음 배열부터 2를 food[2]/2 번, ...

food[x]/2 번 넣는거야 이중for문 돌리면서 intArr[i+j] 하면 되는데,
삽입된 다음칸을 알아내는건 어떻게해야할까 고민했는데 결국 index로 a를 만들었다.

그 후에 int배열을 String으로!

다른 사람 정답

내 것을 제출하고 다른 사람의 코드를 둘러보다가
answer = i + answer + i; 를 발견했다.

이걸 왜 생각 못했을까!!

그리고 for문에서도 int i = food.length-1 로 초기화하여
바로 대입하면 아주 간단해지는 문제였다.

나도 바로 만들어봤다.

    public String solution(int[] food){
        String answer = "0";

        for(int i= food.length-1;i>0;i--) {
            for (int j=0;j<food[i]/2;j++) {
                answer = i+answer+i;
            }
        }

        return answer;
    }
profile
I live in Seoul, Korea, Handsome
post-custom-banner

0개의 댓글