본문 바로가기

프로그래머스(Java)/Level 1

[프로그래머스] 체육복

728x90

코드 힌트

 

  • 학생 배열 초기화:
    • 모든 학생의 체육복 개수를 저장할 배열을 생성하고, 각 요소를 1로 초기화합니다.
    • 배열을 초기화하는 방법으로 for문을 사용해 각 요소에 1을 넣거나, Arrays.fill(배열, 1)을 사용할 수 있습니다.
  • 잃어버린 체육복 반영:
    • lost 배열을 순회하며, 해당 학생의 체육복 개수를 1 감소시킵니다.
  • 여벌 체육복 반영:
    • reserve 배열을 순회하며, 해당 학생의 체육복 개수를 1 증가시킵니다.
  • 체육복 빌려주기:
    • 학생 배열을 순회하며, 체육복이 2개인 학생을 찾습니다.
    • 해당 학생의 왼쪽 또는 오른쪽 학생이 체육복이 없는 경우, 체육복을 빌려줍니다.
  • 체육복을 가진 학생 수 계산:
    • 학생 배열을 순회하며, 체육복을 가지고 있는 학생 수를 계산하여 result에 저장합니다.

 

 


정답은 더보기 클릭

더보기
import java.util.Arrays;

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int result = 0;
        
        // 각 학생의 체육복 개수를 저장하는 배열 초기화
        int[] student = new int[n];
        Arrays.fill(student, 1);  // 모든 학생은 처음에 체육복을 1개씩 가지고 있음
        
        // 체육복을 잃어버린 학생의 체육복 개수를 1 감소
        for (int i = 0; i < lost.length; i++) {
            student[lost[i] - 1] -= 1;
        }
        
        // 여벌 체육복이 있는 학생의 체육복 개수를 1 증가
        for (int i = 0; i < reserve.length; i++) {
            student[reserve[i] - 1] += 1;
        }
        
        // 체육복 빌려주기 처리
        for (int i = 0; i < student.length; i++) {
            if (student[i] == 2) {  // 여벌 체육복이 있는 경우
                if (i - 1 >= 0 && student[i - 1] == 0) {  // 왼쪽 학생이 체육복이 없는 경우
                    student[i - 1] = 1;
                    student[i] = 1;
                } else if (i + 1 < student.length && student[i + 1] == 0) {  // 오른쪽 학생이 체육복이 없는 경우
                    student[i + 1] = 1;
                    student[i] = 1;
                }
            }
        }
        
        // 체육복을 가진 학생 수 계산
        for (int i = 0; i < student.length; i++) {
            if (student[i] > 0) {
                result++;
            }
        }
        
        return result;
    }
}

 

728x90