📍 문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/42862
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
📍 풀이 방법
- 앞번호에게 빌려주는 경우, 뒷번호에게 빌려주는 경우를 다 따져보지 않고도 그리디하게 풀 수 있는 문제이다.
- 우선 학생 수만큼의 길이를 가지는, 모두 1로 구성된 리스트 students 를 만든다.
- lost, reserve 를 각각 순회하면서 도난 당한 학생은 1을 빼주고, 여분이 있는 학생은 1을 더해준다.
- students 의 인접한 두 요소는 총 9가지의 상태 - (0, 0), (1, 0), (0, 1), (0, 2), (1, 1), (2, 0), (1, 2), (2, 1), (2, 2) - 에 있을 수 있다. 이 중에서 (0, 2), (2, 0) 인 경우만 한 학생이 다른 학생에게 체육복을 빌려줄 수 있다.
- students 를 앞에서부터 훑어보면서 위의 두 상태에 있는 경우에만 체육복을 빌려준다.
def solution(n, lost, reserve):
students = [1 for _ in range(n)]
for l in lost:
students[l - 1] -= 1
for r in reserve:
students[r - 1] += 1
answer = 0
for i in range(n):
if i + 1 < n and students[i] + students[i + 1] == 2:
students[i] = students[i + 1] = 1
if students[i] > 0:
answer += 1
return answer'기본' 카테고리의 다른 글
| [코딩테스트/개념] 크루스칼 알고리즘 (Kruskal's Algorithm) (0) | 2024.03.28 |
|---|---|
| [코딩테스트/개념] 탐욕 알고리즘 (Greedy Algorithm) (0) | 2024.03.27 |
| [코딩테스트/Python] 프로그래머스 "퍼즐 조각 채우기" (0) | 2024.03.27 |
| [코딩테스트/Python] 프로그래머스 "아이템 줍기" (0) | 2024.03.26 |
| [PS | 문제 해설] BOJ 20921번 그렇고 그런 사이 (0) | 2021.02.24 |