프로그래머스 (체육복 문제)

2021. 1. 10. 22:36코딩테스트 준비

반응형

# 앞번호나 뒷번호 학생들에게 체육복을 빌려줄 수 있다

# 전체 학생의 수 : n, 체육복을 도난당한 학생들의 번호의 배열 :lost

# 여벌의 체육복을 가져온 학생들의 배열: reverse

# 출력값: 체육수업을 들을 수 있는 학생의 최댓값

 

#솔루션 : 

# 만약 lost 배열의 리스트 내 값의 +1,-1의 값이 reverse 배열에서 동일한 값이 있으면

# lost배열의 해당 값이 pop되고, count가 1 증가한다

# 기본적인 count값은 reverse 배열의 길이와 동일하다

 

이 문제에서 중요한 포인트 중 하나는 set 자료형을 활용하는 것이다

문제에서 체육복을 잃어버린 학생과 여벌의 체육복을 가진 학생이 중복될 일은 절대 없다

따라서, 해당 경우를 제외해주는 것이 중요하다

 

이를 위해, set을 이용하면 차집합을 활용하여 리스트의 중복을 제거할 수 있다.

 

그리고 for 반복문을 이용하여 체육복이 남는 학생들을 대상으로 빌려줄 수 있는 번호에 해당하는

번호를 탐색하여 있으면 lost 배열에서 제거하는 식으로 문제를 풀면 된다.

 

이 떄, 유의할 사항으로는,

반드시 i-1 배열부터 먼저 조건을 달아주어야 한다. 그렇지 않을 경우,

예를 들어 lost: [2,4] reserve: [1,3,6]일 경우, 1이 2를 빌려줄 수 있는 상황인데 3이 2를 빌려줄 경우,

lost 배열에서 4는 원래 3이 빌려주면 되지만 3은 이미 2를 빌려주었기 때문에 lost배열에 그대로

남게 된다. 따라서 이를 방지하기 위하여 반드시 i-1부터 조건을 달아주어야 한다.

반응형

'코딩테스트 준비' 카테고리의 다른 글

미로 탈출 문제  (0) 2021.01.11
프로그래머스(조이스틱 문제)  (0) 2021.01.10
그리디 알고리즘 (백준 2583번)  (0) 2021.01.10
그리디 알고리즘  (0) 2021.01.10
Python 기초 개념  (0) 2021.01.03