[C++] 프로그래머스 Level 1 : 체육복

Kim Nahyeong·2022년 8월 3일
0

프로그래머스

목록 보기
15/38

#include <string>
#include <vector>

using namespace std;

int solution(int n, vector<int> lost, vector<int> reserve) {
    // 체육복 있는 사람 없는 사람 따로 생각하지 말기!
    int arr[31]; // 전체 학생 체육복 수
    
    // 초기화
    for(int i = 0; i < 31; i++){
        arr[i] = 0;
    }
    
    // 체육복 수 벡터 저장
    for(int i = 0; i < lost.size(); i++){
        arr[lost[i]]--;
    }
    
    for(int i = 0; i < reserve.size(); i++){
        arr[reserve[i]]++; // 여벌 가져와서 도난 당한 경우 1 아니라 0임
    }
    
    for(int i = 1; i <= n; i++){
        if(arr[i] == -1) {
            if(arr[i-1] == 1){
                arr[i]++;
                arr[i-1]--;
            } else if(arr[i+1] == 1){
                arr[i]++;
                arr[i+1]--;
            }
        }
    }
    
    int cnt = 0;
    
    for(int i = 1; i <= n; i++){
        printf("%d ", arr[i]);
        if(arr[i] >= 0){
            cnt++;
        }
    }
    
    return cnt;
}

체육복을 빌리고 가져오는 것을 한 배열에 넣어서 생각하면 쉽다. 도난과 빌리는 것도 다 ++ -- 써서... 절댓값으로 = 1 이런식으로 하면 도난당했는데 여분 가져오는 것 이런 것을 확인하기 힘들다.

머리가 많이 굳었나봐ㅜㅜ 왜 오래 생각했을까?

0개의 댓글