본문 바로가기

공부해 codingTest

프로그래머스 JAVA Level 1. 체육복

Level 1. 체육복

https://school.programmers.co.kr/learn/courses/30/lessons/42862

 

프로그래머스

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

programmers.co.kr

 

1. 통과

 

2. 통과 코드

 

3. 문제  해석

최대한 많은 학생이 수업을 들어야 하는 게 포인트다.

즉, 최대한 많은 학생들이 체육복을 1벌 이상 가지고 있어야 한다.

이때 체육복은 자기 번호 앞뒤로만 빌려줄 수 있다.

따라서 왼쪽으로 빌려줄지 오른쪽으로 빌려줄지를 잘 생각해야한다.

 

예를 들어 1번 학생이 0벌, 2번 학생이 2벌, 3번 학생이 0벌, 4번 학생이 2벌이라면, {0, 2, 0, 2}로 나타낼 수 있다.

이때 2번 학생이 3번 학생에게 빌려주면 {0, 1, 1, 2}가 되어 3명이 수업을 들을 수 있지만

2번 학생이 1번 학생에게 빌려주고, 4번 학생이 3번 학생에게 빌려주면 {1, 1, 1, 1}이 되어 4명이 수업을 들을 수 있다.

 

4. 풀이

(1) int배열 student를 만들고, 초기 값을 1로 설정한다.

     index+1이 학생의 번호를 나타내고 밸류값은 체육복 수를 나타낸다.

(2) 여벌을 가지고 있는 번호를 담은 배열 reserve를 사용해서 여벌이 있는 학생들의 체육복 수를 2로 바꾼다.

(3) 체육복을 잃어버린 번호를 담은 배열 lost를 사용해서 체육복을 잃어버린 학생들의 체육복 수를 1씩 빼준다.

 

(4) for문을 사용해 해당 학생의 체육복 수가 0일 경우 먼저 왼쪽에서 오른쪽으로 빌려준다.

     그 다음 오른쪽에서 왼쪽으로 빌려준다.

     왼쪽과 오른쪽에서 빌릴 수 없는 경우를 처리한다.