티스토리 뷰

Algorithm/Programmers

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

감성적인 개발자 2021. 8. 24. 18:56

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

 

코딩테스트 연습 - 체육복

점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번

programmers.co.kr

#include <string>
#include <vector>

using namespace std;
/*
체육복이 한 벌인 학생 : 1
체육복을 도난당한 학생 : -1
여벌 체육복이 있는 학생 : 2
*/
int solution(int n, vector<int> lost, vector<int> reserve) {
    int answer = 0;
    int tmp;
    vector<int> student;
    for(int i = 0; i < n; i++){
    	// 처음에 모두가 체육복을 하나 씩 가짐
        student.push_back(1);
    }
    for(int i = 0; i < lost.size(); i++){
    	// 잃어버린 사람들은 하나씩 잃어버림
        student[lost[i] - 1]--;
    }
    for(int i = 0; i < reserve.size(); i++){
    	// 여벌의 체육복은 한 벌씩 추가
        student[reserve[i] - 1]++;
    }
    
    for(int i = 0; i < n; i++){
        if(student[i] == 0){
            if(student[i - 1] == 2){
                student[i]++;
                student[i - 1]--;
            }
            else if(student[i + 1] == 2){
                student[i]++;
                student[i + 1]--;
            }
        }
    }
    
    for(int i = 0; i < n; i++){
        if(student[i] >= 1){
            answer++;
        }
    }
    return answer;
}

 

1. 체육복 개수 설정

  • 모두가 처음 하나씩 체육복을 가지고 있었다고 가정한다.
  • 체육복을 도둑맞은 학생들은 체육복 개수를 1- 한다.
  • 여벌의 체육복이 있는 학생들은 체육복 개수를 +1 한다.

2. 체육복을 빌리는 과정

  • 만약 i 번째 학생이 체육복을 도둑맞았다면 (체육복 개수가 0이라면) i - 1, i + 1 중 체육복이 2개인 학생에게서 하나를 빌려온다.

3. 정답 출력

  • 체육복이 있는 학생의 수를 카운트해준다.

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함