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 |