Roothyo
루시오의 Devlog
Roothyo
전체 방문자
오늘
어제
  • 분류 전체보기 (92)
    • ComputerScience (56)
      • 자료구조 (1)
      • 알고리즘 (6)
      • 네트워크 (12)
      • 코딩테스트 (34)
      • AI & ML (1)
      • BlockChain (1)
      • Security (1)
    • Programming Language (8)
      • JavaScript (8)
      • Python (0)
    • 서비스개발(Web, App) (18)
      • Front-End (2)
      • Back-End (8)
      • Cloud Server (2)
      • DevOps (4)
    • 프로젝트 (9)
      • UNY (4)
      • ThrowOrNot (4)
      • MoA (1)
    • 잡담 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Nest.js
  • level2
  • js
  • VPAID
  • 백준
  • 프로그래머스
  • 알고리즘
  • 완전탐색
  • 코테
  • Socket.io
  • Node
  • Python3
  • TLS
  • chat
  • 네트워크공부
  • node.js
  • Redis
  • OpenVidu
  • Vast
  • 클라우드서버
  • Python
  • nodejs
  • 비디오광고
  • 애자일프로젝트
  • FRONT-END
  • JavaScript
  • github
  • 코딩테스트
  • 네트워크
  • vmap

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Roothyo

루시오의 Devlog

ComputerScience/코딩테스트

[프로그래머스]체육복-python3

2021. 7. 10. 12:03

문제 설명

점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다.

전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution 함수를 작성해주세요.

제한사항

  • 전체 학생의 수는 2명 이상 30명 이하입니다.
  • 체육복을 도난당한 학생의 수는 1명 이상 n명 이하이고 중복되는 번호는 없습니다.
  • 여벌의 체육복을 가져온 학생의 수는 1명 이상 n명 이하이고 중복되는 번호는 없습니다.
  • 여벌 체육복이 있는 학생만 다른 학생에게 체육복을 빌려줄 수 있습니다.
  • 여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다. 이때 이 학생은 체육복을 하나만 도난당했다고 가정하며, 남은 체육복이 하나이기에 다른 학생에게는 체육복을 빌려줄 수 없습니다.

입출력 예

 

n lost reserve return
5 [2, 4] [1, 3, 5] 5
5 [2, 4] [3] 4
3 [3] [1] 2

입출력 예 설명

예제 #1
1번 학생이 2번 학생에게 체육복을 빌려주고, 3번 학생이나 5번 학생이 4번 학생에게 체육복을 빌려주면 학생 5명이 체육수업을 들을 수 있습니다.

예제 #2
3번 학생이 2번 학생이나 4번 학생에게 체육복을 빌려주면 학생 4명이 체육수업을 들을 수 있습니다.

출처

※ 공지 - 2019년 2월 18일 지문이 리뉴얼되었습니다.
※ 공지 - 2019년 2월 27일, 28일 테스트케이스가 추가되었습니다.


풀이

- Greedy 알고리즘 문제로, lost된 list를 돌 때, 최적의 선택을 체크한다.

- 문제를 자세히 읽지 못해서 갈피를 못잡았었다. 학생들의 번호가 체격순으로 정해져 있기때문에, 바로 앞 번호 학생과 바로 뒷 번호 학생만 체육복을 빌려줄 수 있다는 것에 주의할 것.

 

더보기
def solution(n, lost, reserve):
    answer = n
    inter = sorted([x for x in lost if x in reserve])
    lost = sorted([x1 for x1 in lost if not x1 in inter])
    reserve = sorted([x2 for x2 in reserve if not x2 in inter])
    answer -= len(lost)
    
    for i in lost:
        if i-1 in reserve:
            reserve.remove(i-1)
            answer +=1
        elif i+1 in reserve:
            reserve.remove(i+1)
            answer +=1
            
    print(reserve)
    return answer

'ComputerScience > 코딩테스트' 카테고리의 다른 글

[프로그래머스] 약수의 개수와 덧셈 - python3  (0) 2021.07.15
[프로그래머스] 숫자 문자열과 영단어 - python3  (0) 2021.07.13
[프로그래머스] 크레인 인형뽑기-python3  (0) 2021.07.08
[프로그래머스] 폰켓몬 - python3  (0) 2021.07.05
[프로그래머스] 소수 만들기 - python3  (0) 2021.07.05
    'ComputerScience/코딩테스트' 카테고리의 다른 글
    • [프로그래머스] 약수의 개수와 덧셈 - python3
    • [프로그래머스] 숫자 문자열과 영단어 - python3
    • [프로그래머스] 크레인 인형뽑기-python3
    • [프로그래머스] 폰켓몬 - python3
    Roothyo
    Roothyo
    개발 관련 지식 포스팅/ 잡담 블로그 입니다. 반갑습니다! (github : https://github.com/geun9716)

    티스토리툴바