algorithm/Greedy

프로그래머스 체육복

hw.kr 2022. 9. 28. 00:46

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

📌 해결순서

여벌의 체육복이 있는 학생이라고 해서 무조건 도난당한 학생에게 체육복을 빌려줄 수 없음에 유의해야 했다

여벌의 체육복이 있어도 그 학생이 체육복을 도난 당했으면 체육복이 현재 1개밖에 없기 때문에 빌려줄 수 없다.

그래서, 모든학생이 체육복을 하나씩 다 가지고 있다고 가정하고 출발 해봤다.

 

도난 당하면 -1, 여분이 있는 학생이면 +1 

그리고, 여분이 있는데 도난 낭했으면 +1 -1 될테니 결국 1개밖에 남지 않게 된다.

따라서 빌려줄 수 없음!

 

그리고 배열을 돌면서 2개면 양옆 학생에게 하나씩 넘겨주고 그 배열값을 1 빼주는 식으로 풀었다.

 

📌 코드

def solution(n, lost, reserve):
    answer = 0
    cnts = [1] * (n + 1)
    for i in lost:
        cnts[i] -= 1
    for j in reserve:
        cnts[j] += 1

    for i in range(1, n + 1):
        if cnts[i] == 0:
            for x in (i - 1, i + 1):
                if x < 1 or x > n:
                    continue
                if cnts[x] > 1:
                    cnts[x] -= 1
                    cnts[i] += 1
                    break

    for i in range(1, n + 1):
        if cnts[i] > 0:
            answer += 1

    return answer

 

 

'algorithm > Greedy' 카테고리의 다른 글

백준 18234 당근 훔쳐 먹기  (1) 2022.10.13
프로그래머스 조이스틱  (0) 2022.09.28
백준 1339 단어수학  (0) 2022.09.04
백준 2839 설탕배달  (0) 2022.08.29
백준 1744 두 수 묶기  (0) 2022.08.29