[프로그래머스] 체육복 (그리디)

2025. 6. 14. 22:56·Algorithm/Coding Test Records

문제 소개

오늘 풀었던 체육복 - 프로그래머스 문제를 정리합니다.
이 문제는 체육복이 없는 학생에게 여벌 체육복을 빌려줘 가능한 최대 학생 수를 구하는 그리디 유형 문제입니다. 핵심은 "양쪽 학생만 빌려줄 수 있음"과 "여벌이 있지만 도난당한 경우 빌려줄 수 없음" 조건을 처리하는 데 있습니다.

문제 링크: 체육복 - 프로그래머스


문제 접근 방식

이 문제는 다음과 같은 방식으로 접근했습니다:

  1. 학생 상태를 배열로 관리 (기본값 0, 도난 -1, 여벌 +1)
  2. 여벌 + 도난 중복 학생은 0으로 정리
  3. 왼쪽 또는 오른쪽 학생에게만 빌려주는 탐욕적 할당 방식(그리디)
    현재 시점에서 가장 가까운(왼쪽부터) 학생에게 먼저 빌려주는 방식이 전체 학생 수를 최대로 만드는 결정
  4. 끝까지 체육복 못 받은 학생 수만큼 전체 인원에서 차감

해결 과정 및 코드

핵심 아이디어

  1. students[] 배열을 통해 각 학생의 체육복 상태를 정수값으로 표현
    • 기본값 0, 도난 시 -1, 여벌 시 +1
  2. 먼저 도난, 여벌 반영 후
    • 여벌 + 도난 학생은 자연스럽게 0 처리됨
  3. 왼쪽(i-1)이나 오른쪽(i+1)에 여벌이 있는 경우 빌려줌
    • 가장 먼저 왼쪽(i-1) 확인, 없으면 오른쪽(i+1) 확인
  4. 어느 쪽에서도 못 빌리면 최종 수업 인원에서 차감

코드

시간 복잡도 : O(N)

import java.util.*;

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int[] students = new int[n + 2];  // index 0, n+1은 패딩
        int answer = n;

        // 도난 처리
        for (int l : lost)
            students[l]--;

        // 여벌 처리
        for (int r : reserve)
            students[r]++;

        // 도난 상태 복구 시도
        for (int i = 1; i <= n; i++) {
            if (students[i] != -1) continue;

            // 왼쪽에서 빌리기
            if (students[i - 1] == 1) {
                students[i]++;
                students[i - 1]--;
            }
            // 오른쪽에서 빌리기
            else if (students[i + 1] == 1) {
                students[i]++;
                students[i + 1]--;
            }
            // 못 빌렸으면 수업 불가
            else answer--;
        }

        return answer;
    }
}

 

'Algorithm > Coding Test Records' 카테고리의 다른 글

[프로그래머스] 큰 수 만들기 (그리디)  (1) 2025.06.16
[프로그래머스] 체육복 (그리디+집합)  (1) 2025.06.15
[프로그래머스] 도둑질 (DP)  (1) 2025.06.13
[백준] 괄호 추가하기 (DFS)  (3) 2025.06.12
[프로그래머스] 사칙연산 (분할 정복 + DP)  (1) 2025.06.10
'Algorithm/Coding Test Records' 카테고리의 다른 글
  • [프로그래머스] 큰 수 만들기 (그리디)
  • [프로그래머스] 체육복 (그리디+집합)
  • [프로그래머스] 도둑질 (DP)
  • [백준] 괄호 추가하기 (DFS)
Celion
Celion
오늘도 평소처럼 화이팅!
  • Celion
    Orion Log
    Celion
  • 전체
    오늘
    어제
    • 전체 글 (144)
      • Uncompiled Thoughts (8)
        • 네이버 부스트캠프 10기 (5)
      • CS 기초부터 한 걸음씩 (34)
      • Code Odyssey (22)
      • Algorithm (77)
        • Coding Test Records (63)
      • Git (3)
      • reference (0)
  • 블로그 메뉴

    • 태그
    • 방명록
  • 태그

    java
    boostcamp
    코테
    Kotlin
    문법정리
    프로그래머스
    백준
    알고리즘고득점kit
    시뮬레이션
    Level2
    Level3
    greedy
  • 최근 글

  • 인기 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.4
Celion
[프로그래머스] 체육복 (그리디)
상단으로

티스토리툴바