[프로그래머스/Python] 체육복

2025. 4. 9. 10:39·알고리즘문제풀이

문제

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


문제 풀이(정답)

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

    for k in range(1, n+1):
        if (dp[k] == 2 and dp[k-1] == 0):
            dp[k], dp[k-1] = 1, 1
        if (dp[k] == 2 and dp[k+1] == 0):
            dp[k], dp[k+1] = 1, 1

    dp = dp[1:n+1]
    for d in dp:
        if d >= 1:
            answer += 1
    return answer


dp : 각 학생이 가진 체육복의 개수

  • 기본적으로 1개씩 가지고 있다고 생각
  • reverse에 있는 학생은 + 1, lost에 있는 학생은 - 1 처리 해준다.
  • dp[0]과 dp[-1]은 가짜 인덱스로 인덱스 에러 방지용으로 사용한다. 그 수는 임의로 -1로 부여했다.

 

체육복을 2벌 가진 학생이 양 옆에 체육복이 없는 경우에게 빌려 줄 수 있다.

따라서 먼저 왼쪽 학생을 먼저 확인하고, 그 후 오른쪽 학생을 확인한다.

이 순서가 바뀌면 오답이 된다. 그 이유는 한 명이 두 명에게 빌려주는 걸 방지하기 위해서이다.

 

그 후 가짜 인덱스로 사용되었던 0번과 마지막 인덱스를 제거해준 후,

체육복이 1벌 이상 있는 학생의 수를 세어준다.

저작자표시 비영리 변경금지 (새창열림)

'알고리즘문제풀이' 카테고리의 다른 글

[프로그래머스/Python] 덧칠하기  (0) 2025.04.03
[백준/Python] 11279번 최대 힙  (0) 2025.03.31
[백준/Python] 2161번 카드1  (2) 2025.03.28
[프로그래머스/Python] 유연근무제  (0) 2025.03.21
[백준/Python] 1406번 에디터  (0) 2025.03.18
'알고리즘문제풀이' 카테고리의 다른 글
  • [프로그래머스/Python] 덧칠하기
  • [백준/Python] 11279번 최대 힙
  • [백준/Python] 2161번 카드1
  • [프로그래머스/Python] 유연근무제
jungyn
jungyn
jungyn 님의 블로그 입니다.
  • jungyn
    jungyn 님의 블로그
    jungyn
  • 전체
    오늘
    어제
    • 분류 전체보기 (36)
      • 알고리즘문제풀이 (31)
      • 제로인턴 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    카드1
    counter
    백준
    1847
    DP
    제로인턴
    사전직무교육
    28278
    후기
    스택
    수들의 합 2
    2606
    2108
    너비우선탐색
    2161
    스택 수열
    2차원행렬
    다이나믹프로그래밍
    solved.ac
    교점개수
    18110
    2563
    시간초과
    1629
    11729
    스택 2
    통계헉
    프로그래머스
    SYS
    BFS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
jungyn
[프로그래머스/Python] 체육복
상단으로

티스토리툴바