Algorithm/Programmers

[Programmers - lv01] 체육복 (cpp / python)

  • -
728x90

체육복

 

코딩테스트 연습 - 체육복

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

programmers.co.kr

문제 설명

모든 학생들에게 체육복을 1개씩 주고, 잃어버린 사람은 -1 여벌이 있는 사람은 +1 하여 체육복을 가지고 있지않은 학생을 기준으로 좌, 우를 탐색하며 답을 찾아낸다.  

문제 풀이

소스코드 : C++

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

using namespace std;
int solution(int n, vector<int> lost, vector<int> reserve) {
    int answer = 0;
    vector<int> students(n+1,1);
    for(auto r : reserve)students[r] +=1;
    for(auto l : lost) students[l] -=1;
    for(int i=1; i<=n; i++){
        if(students[i] == 0){
            if(students[i-1] == 2) students[i-1] = students[i] = 1;
            else if(students[i+1] == 2) students[i] = students[i+1] = 1;
        }
    }
    for(int i=1; i<=n; i++)
        if(students[i])answer++;
    return answer;
}

소스코드 : Python

def solution(n, lost, reserve):
    answer = 0
    students = [1 for i in range(n+2)]
    for l in lost: students[l] -=1
    for r in reserve: students[r] +=1
    for i in range(1,n+1):
        if students[i] == 0:
            if students[i-1]==2: 
                students[i-1] = 1
                students[i] = 1
            elif students[i+1] == 2: 
                students[i] = 1
                students[i+1] = 1
    for i in range(1,n+1):
        if students[i]: 
            answer+=1
    return answer
728x90
300x250
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.