본문 바로가기
코딩테스트/프로그래머스

[탐욕법(Greedy)] Level 1 체육복 - JAVA

by 의정부핵꿀밤 2022. 2. 10.
728x90

https://yummy0102.tistory.com/108 

 

탐욕법(Greedy) > 체육복

전체 n명의 학생 lost 벡터에 체육복 잃어버린 학생 번호 저장 reserve 벡터에 체육복 여분 있는 학생 번호 저장 단, 체육복은 앞번호 혹은 뒷번호 학생에게만 대여 가능 #include #include #include using name

yummy0102.tistory.com


오늘은 위 문제를 자바로 다시 풀었다

알고리즘은 기억해서 그냥 풀었는데 자꾸 테케 오류가 났다,,,

 

고민한 결과 한 학생이 가질 수 있는 체육복은 모두 1로 초기화했을 때, 최대 2개이고 최소 1개이다

그래서 부등호를 사용하지 않고 그냥 등호로 2개면 빌려주고, 0개면 받는 식으로 구현하였고, answer를 구할 때는 1개 이상이면 체육복이 있다고 세도록 했다

사실 정확한 테케는 몰라서 반례는 잘 모르지만 암튼 부등호에서 오류가 나는 것은 확실해서 이렇게 수정했더니 맞았당!

 

 

자바 코드)

import java.util.Arrays;

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int answer = 0;
        int[] student = new int[n];
        Arrays.fill(student, 1);
        
        for(int l : lost) {
            student[l-1] -= 1;
        }
        
        for(int r : reserve) {
            student[r-1] +=1;
        }
        
        for(int i=0;i<n;i++) {
            if(student[i]==2) {
                if(i!=0 && student[i-1]==0) {
                    student[i-1] = 1;
                    student[i] = 1;
                }
            }
            if(student[i]==2) {
                if(i!=n-1 && student[i+1]==0) {
                    student[i+1]=1;
                    student[i]=1;
                }
            }
               
        }
        
        for(int i=0;i<n;i++) {
            if(student[i]>=1) {
                answer++;
            }
        }
        
        return answer;
    }
}

그럼 빠잉!

728x90

댓글