티스토리 뷰
[ 프로그래머스 ] 체육복 ( 자바 )
n명의 학생 중 체육복을 1개 더 있거나(reserve배열) 또는 없는(lost배열)학생이 있다.
체육복이 없는 학생이 최대한 여벌이 있는 학생한테 빌렸을때 체육복이 있는 학생의 최대값구하기
단, 학생이 잃어버렸지만 여벌이 있는 경우도 있다.
https://programmers.co.kr/learn/courses/30/lessons/42862
코딩테스트 연습 - 체육복 | 프로그래머스
점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다. 전체
programmers.co.kr
구조
cost[i] : i 번 학생이 갖고있는 체육복 수
cost 1 초기화
lost 배열 돌며 cost 1 감소
reserve 배열 돌며 cost 1 증가
for( 모든 lost학생에 대해 )
count == 0이면
왼쪽 학생 여벌있나? 있으면 빌림
오른쪽 학생 여벌있나? 있으면 빌림
count에서 0아닌 수 구하기
핵심
1 체육복 없는 학생이 빌리는 방법
체육복 없는 학생이 랜덤하게 빌리면 다른 체육복이 없는 학생이 체육복을 빌릴 수 있음에도 빌릴 수 없는 경우가 존재한다.
아래 그림에서 2번 학생이 1,3번 학생에게 빌릴 수 있는데 3번 학생에게 빌리면 4번학생은 빌릴 수 없다.
학생 | 1 | 2 | 3 | 4 |
체육복 수 | 2 | 0 | 2 | 0 |
따라서, 체육복이 없는 학생들에 대해 순서를 강제함.
낮은 번호의 체육복없는 학생부터 왼쪽부터 여벌이 있는 학생을 검사한다.
제일 낮은 번호고 왼쪽부터 검사하므로 오른쪽 옷이 없는 학생이 가능한데도 옷을 못빌리는 경우를 방지할 수 있다.
추가적으로 더 궁금한 점 있으면 댓글 달아주세요
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int[] count = new int[n+1];
for(int i = 1 ; i <= n ; i++) {
count[i] = 1;
}
for(int i = 0 ; i<lost.length ; i++) {
count[lost[i]] = 0;
}
for(int i = 0 ; i < reserve.length ; i++) {
count[reserve[i]]++;
}
for(int i = 0 ; i < lost.length ; i++) {
if(count[lost[i]] == 0) {
if( lost[i] - 1 >= 1 && count[lost[i] - 1] == 2) {
count[lost[i]] = 1;
count[lost[i] - 1]--;
}else if(lost[i] + 1 <= n && count[lost[i] + 1] == 2) {
count[lost[i]] = 1;
count[lost[i] + 1]--;
}
}
}
int ans = 0;
for(int i = 1 ; i <= n ; i++) {
if(count[i] != 0)
ans++;
}
return ans;
}
}
|
cs |
'CS > 알고리즘 풀이' 카테고리의 다른 글
[ 프로그래머스 ] 문자열 내 마음대로 정렬하기 ( java ) (1) | 2019.12.04 |
---|---|
[ 백준 17837 ] 새로운 게임 2 (java) (0) | 2019.12.01 |
[ 프로그래머스 ] 모의고사 ( java ) (0) | 2019.11.26 |
[ 프로그래머스 ] 완주하지 못한 선수 ( java ) (0) | 2019.11.23 |
[ 프로그래머스- 2020카카오 공채 ] 문자열 압축 (java) (2) | 2019.11.23 |
- Total
- Today
- Yesterday
- 가장 큰 정사각형 찾기
- 찾아라 프로그래밍 마에스터
- 게리맨더링 2
- 124 나라의 숫자
- 문자열을 정수로 바꾸기
- 17779
- 3954
- 카카오 2020 공채
- 프로그래머스
- 자바
- 큰 수 만들기
- 정수 내림차순으로 배치하기
- 17825
- 투포인터
- 티스토리챌린지
- 후보키
- DP
- 2018 카카오 공채
- 백준
- 카카오2020 공채
- programmers
- Brainf**k 인터프리터
- 2019 카카오 공채
- 단체사진 찍기
- java
- 오블완
- 라면공장
- 주사위 윷놀이
- 짝지어 제거하기
- 괄호 변환
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |