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

2022. 11. 4. 19:05·프로그래머스/Level 1

문제

https://school.programmers.co.kr/learn/courses/30/lessons/134240?language=java 

 

프로그래머스

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

programmers.co.kr

 

풀이 코드

public String solution(int[] food) {
    String answer = "0";                    //answer을 xxx0xxx형태로 만들어주기 위해 미리 0을 answer에 대입
    int food_n;                             //food의 갯수를 임시로 저장할 변수 생성
    for(int i = food.length-1; i >= 1;i--){ //for문 안의 이유는 블로그에 기재
        food_n = food[i]/2;
        for(int j = 0; j<food_n;j++){
            answer = i + answer + i;
        }
    }
    return answer;
}

 

코드 해설

이 문제는 쉬운 문제이지만 풀고 다른 사람들의 코드를 보니 다들 복잡하게 풀어서 내 풀이과정이 누군가에게 도움이 될까 싶어 올려본다! 

 

우선

for(int j = 0; j<food_n;j++){
    answer = i + answer + i;
}
  • 제일 안쪽의 반복문에서 j의 범위를 저렇게 잡은 이유는 food의 갯수만큼 반복해서 answer에 추가시키려고 저렇게 범위를 잡았고

  • 반복문 안의 코드를 저렇게 짠 이유는, 답이 0을 중심으로 1230321 이런 식으로 대칭되는 형태라서
    answer = i + answer + i 이렇게 코드를 짰다. 
for(int i = food.length-1; i >= 1;i--){
    food_n = food[i]/2;
    
    for(int j = 0; j<food_n;j++){
        answer = i + answer + i;
    }
}
  • foon_n = food[i]/2;로 한 이유는 만약에 food의 갯수가 홀수면 어차피 하나는 못 쓰므로
    그냥 2로 나눈 몫을 food_n으로 잡아서 양쪽에 한번에 그 몫만큼 반복해서 food를 배치하는 방식(i + answer + i)을 택했다.

  • 바깥 쪽의 i의 범위를 저렇게 잡은 이유는
    예를 들어, food[] = [1,3,4,6]일 경우 우리가 원하는 답은 answer --> "1223330333221" 이렇게 나와야 하지만
    • i = 1부터 반복문을 시작할 경우
      answer = i + answer + i에 의해서
      i = 1일때, answer --> "101"

      i = 2일때, answer --> "2210122"
      i = 3일때, answer --> "3332210122333"
      이런 식으로 역순이 나와버린다. 그래서 i = food.length-1로 잡고 반복문을 시작했고
       
  •  i = food.length-1로 잡은 이유는 제일 끝 수를 넣는다고 food.length를 넣어버리면
    NullPointException이 발생하기 때문이다.(new arr[4]라고 생성한다고 해도 index는 arr[0]부터 arr[3]이 마지막이기 때문)
저작자표시 비영리 (새창열림)

'프로그래머스 > Level 1' 카테고리의 다른 글

[프로그래머스][Level1][Java] 신고 결과 받기  (0) 2022.03.05
[프로그래머스][Level1][Java] 키패드 누르기  (0) 2022.03.04
[프로그래머스][Level1][Java] 체육복  (0) 2022.03.04
[프로그래머스][Level1][Java] 실패율  (0) 2022.03.03
[프로그래머스][Level1][Java] 다트 게임  (0) 2022.03.01
'프로그래머스/Level 1' 카테고리의 다른 글
  • [프로그래머스][Level1][Java] 신고 결과 받기
  • [프로그래머스][Level1][Java] 키패드 누르기
  • [프로그래머스][Level1][Java] 체육복
  • [프로그래머스][Level1][Java] 실패율
BvrPark
BvrPark
코드 퍼즐과 개발 일상
  • BvrPark
    비버의 개발 일지
    BvrPark
  • 전체
    오늘
    어제
    • 분류 전체보기 (121)
      • JAVA (7)
        • 메서드 외울 것 (2)
      • 프로그래머스 (56)
        • 총 풀이 코드(깃허브) (1)
        • Level 1 (22)
        • Level 2 (33)
      • 백준 알고리즘(단계 별) (16)
        • 총 풀이 코드(깃허브) (1)
        • 1. 입출력과 사칙연산 (2)
        • 2. if 문 (2)
        • 3. for문 (1)
        • 4. while문 (2)
        • 5. 1차원 배열 (3)
        • 6. 함수 (1)
        • 7. 문자열 (1)
        • 8. 기본수학 1 (3)
      • 백준 알고리즘(solved.ac) (9)
        • 총 풀이 코드(깃허브) (1)
        • class2 (8)
      • LeetCode 문제 풀이 (4)
        • 총 풀이 코드(깃허브) (1)
        • Easy (3)
      • 코드업 알고리즘 (7)
      • git과 github사용법 (4)
      • html, css, javaScript (2)
      • 프로젝트 (11)
        • 순수 Java 프로젝트 (2)
        • 쇼핑몰 프로젝트 (2)
        • 게시판 프로젝트 (5)
        • 근태관리 프로젝트 (2)
      • 커피타임 (2)
        • 2023년 (2)
        • 2024년 (0)
  • 블로그 메뉴

    • 링크

      • 포트폴리오
      • 깃허브
    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • Designed By정상우
    BvrPark
    [프로그래머스][Level1][Java] 푸드 파이트 대회
    상단으로

    티스토리툴바