코딩테스트

[프로그래머스] 체육복 - C++

김꿍디꿍디 2024. 4. 7. 23:34
반응형

문제

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

  • 난이도 : LV 1
  • 소요 시간 : 15분

접근 방법

학생의 체육복 개수 저장할 배열을 만들어서 1로 초기화한다.
여분의 개수를 가진 학생은 배열 값을 2 로 만들어준다.
도난 당한 학생은 체육복 개수를 -1로 해준다.

전체 배열을 돌면서, 체육복 개수가 0이라면
먼저 앞 요소가 2 이면 2-1 / 0+1 로 빌려줌 처리를 해준다.
앞 요소가 2가 아니고 뒤 요소가 2 라면 마찬가지로 빌려줌 처리를 해준다.

나의 풀이

#include <string>
#include <vector>
#include <iostream>

using namespace std;

int solution(int n, vector<int> lost, vector<int> reserve) {
    int answer = 0;

    vector<int> v(n, 1);

    for(int i : reserve) {
        v[i-1] = 2;
    }

    for(int i : lost) {
        v[i-1]--;
    }


    for(int i=0; i<v.size(); i++) {
       if (v[i] == 0) {
           // 앞 
           if (v[i-1] == 2) {
               v[i-1]--;
               v[i]++;
           }
           // 뒤
           else if (v[i+1] == 2) {
               v[i+1]--;
               v[i]++;
           }
       }
    }

    for(int i : v) {
        if (i > 0) answer++;
    }
    return answer;
}

정리

테스트 케이스를 실행했는데 아무리 해도 이해가 안가서
일단 제출했더니 정답이라 떴다..
잘못 된 거 같아서 질문 남겼는데 혹시 제가 잘못된 거라면 댓글로 이해 시켜주시면 감사하겠습니다 ㅎ

https://school.programmers.co.kr/questions/75027


>> 문제 바뀌기 전에 풀었을 때 내가 추가했던 거였다 ㅎ...
 

반응형