프로그래머스 창고 정리 JAVA 풀이

2026. 6. 24. 15:28·코테(Solved.ac + Programmers)
728x90

🔗 문제 링크

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


📌 문제 개요

창고의 각 칸에 들어있는 물건 이름과 개수가 배열로 주어진다.

같은 이름의 물건이 여러 칸에 나누어져 있을 수 있으므로, 같은 물건끼리 하나로 합쳐 개수를 누적해야 한다.

 

정리된 창고에서 개수가 가장 많은 물건의 이름을 반환하는 문제이다.


📌 접근 방법

중복된 물건을 하나로 합치기 위해 새로운 배열을 사용했다.

clean_storage에는 중복이 제거된 물건 이름을 저장하고, clean_num에는 해당 물건의 누적 개수를 저장한다.

기존 storage 배열을 순회하면서 현재 물건이 이미 clean_storage에 있는지 확인한다.

 

이미 있다면 해당 위치의 개수에 더하고, 없다면 새로운 물건으로 추가한다.

모든 물건을 정리한 뒤, 누적 개수가 가장 큰 물건의 이름을 찾아 반환한다.


📌 핵심 아이디어

1. 정리된 물건 배열 만들기

같은 물건끼리 합친 결과를 저장하기 위한 배열이다.

최악의 경우 모든 물건 이름이 다를 수 있으므로 기존 배열과 같은 길이로 생성한다.

String[] clean_storage = new String[storage.length];
int[] clean_num = new int[num.length];

 

 

2. 이미 등록된 물건인지 확인하기

clean_idx는 현재 물건이 정리된 배열에 이미 있는지 나타내는 변수이다.

초기값을 -1로 두고, 같은 이름의 물건을 찾으면 해당 인덱스를 저장한다.

문자열 비교이므로 equals()를 사용해야 한다.

int clean_idx = -1;

for (int j = 0; j < num_item; j++) {
    if (storage[i].equals(clean_storage[j])) {
        clean_idx = j;
        break;
    }
}
 

 

3. 처음 나온 물건이면 새로 추가하기

같은 물건을 찾지 못했다면 처음 나온 물건이므로 clean_storage와 clean_num에 새로 저장한다.

num_item은 현재까지 정리된 물건의 개수를 의미한다.

if (clean_idx == -1) {
    clean_storage[num_item] = storage[i];
    clean_num[num_item] = num[i];
    num_item += 1;
}
 

 

4. 이미 있는 물건이면 개수 누적하기

이미 등록된 물건이라면 새로 추가하지 않고 기존 개수에 현재 개수를 더한다.

else {
    clean_num[clean_idx] += num[i];
}

 

가장 개수가 많은 물건 찾기

int num_max = -1;
String answer = "";

for (int i = 0; i < num_item; i++) {
    if (clean_num[i] > num_max) {
        num_max = clean_num[i];
        answer = clean_storage[i];
    }
}

정리된 물건들 중 가장 개수가 큰 값을 찾고, 해당 물건 이름을 answer에 저장한다.


📌 전체 코드

package level0;

public class No35 {
    public static void main(String[] args) {
        String[] storage = {"pencil", "pencil", "pencil", "book"};
        int[] num = {2, 4, 3, 1};

        int num_item = 0;
        String[] clean_storage = new String[storage.length];
        int[] clean_num = new int[num.length];

        for (int i = 0; i < storage.length; i++) {
            int clean_idx = -1;

            for (int j = 0; j < num_item; j++) {
                if (storage[i].equals(clean_storage[j])) {
                    clean_idx = j;
                    break;
                }
            }

            if (clean_idx == -1) {
                clean_storage[num_item] = storage[i];
                clean_num[num_item] = num[i];
                num_item += 1;
            } else {
                clean_num[clean_idx] += num[i];
            }
        }

        int num_max = -1;
        String answer = "";

        for (int i = 0; i < num_item; i++) {
            if (clean_num[i] > num_max) {
                num_max = clean_num[i];
                answer = clean_storage[i];
            }
        }

        System.out.println(answer);
    }
}
 

📄 정리

  • 같은 이름의 물건은 하나로 합쳐 개수를 누적한다.
  • 중복 여부는 clean_storage 배열을 직접 탐색해서 확인한다.
  • 문자열 비교는 equals()를 사용해야 한다.
  • 실제 저장된 물건 개수는 num_item으로 관리한다.
  • 마지막에 누적 개수가 가장 큰 물건의 이름을 찾으면 된다.
728x90

'코테(Solved.ac + Programmers)' 카테고리의 다른 글

프로그래머스 정수를 나선형으로 배치하기 JAVA 풀이 (구현, 시뮬레이션)  (0) 2026.06.26
프로그래머스 신호등 정전 JAVA 풀이 (시뮬레이션, 최소공배수)  (0) 2026.06.25
프로그래머스 숫자의 표현 JAVA 풀이 (투 포인터, 슬라이딩 윈도우)  (0) 2026.06.23
프로그래머스 다음 큰 숫자 JAVA 풀이 (비트 연산, Integer.bitCount)  (0) 2026.06.23
프로그래머스 피보나치 수 JAVA 풀이 (DP, 공간 최적화)  (0) 2026.06.22
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
  • 프로그래머스 정수를 나선형으로 배치하기 JAVA 풀이 (구현, 시뮬레이션)
  • 프로그래머스 신호등 정전 JAVA 풀이 (시뮬레이션, 최소공배수)
  • 프로그래머스 숫자의 표현 JAVA 풀이 (투 포인터, 슬라이딩 윈도우)
  • 프로그래머스 다음 큰 숫자 JAVA 풀이 (비트 연산, Integer.bitCount)
PUSH → MERGE → DEPLOY
PUSH → MERGE → DEPLOY
데이터 흐름과 운영 자동화를 설계하는 백엔드 개발자
  • PUSH → MERGE → DEPLOY
    Coding Dongin
    PUSH → MERGE → DEPLOY
  • 전체
    오늘
    어제
    • MEUN
      • 코테(Solved.ac + Programmers)
      • BootCamp(JAVA)
      • JAVA
      • SpringBoot
      • JavaScript
      • JSP
      • DB(SQL)
      • React
      • HTML_CSS
      • jQuery
      • SCSS
      • GSAP
      • 설치 + 꿀팁
      • 정보처리기사 오답노트
      • 정보처리기사 기출문제
  • 블로그 메뉴

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

    • GIT
  • 공지사항

  • 인기 글

  • 태그

    알고리즘
    정렬
    level1
    백준
    실기
    배열
    수학
    구현
    정처기실기
    정보처리기사 실기 기출문제
    문자열
    정처기
    level0
    정보처리기사
    자료구조
    dp
    완전탐색
    기출문제
    Level2
    백엔드개발자
    springboot
    java
    자바
    피보나치
    코딩테스트
    시뮬레이션
    프로그래머스
    브루트포스
    solved.ac
    정처기오답노트
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.4
PUSH → MERGE → DEPLOY
프로그래머스 창고 정리 JAVA 풀이
상단으로

티스토리툴바