-
반응형
programmers.co.kr/learn/courses/30/lessons/42862
코딩테스트 연습 - 체육복
점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번
programmers.co.kr
문제해결)
vector<int> st를 n개 만든뒤 모두 0으로 초기화시킨다. 여기서 0=자기체육복만 가지고있는사람, -1=도난당한사람, 1=여분의 체육복이 있는사람을 의미한다.
그런뒤 lost 배열을 돌며 해당 학생의 값을 -1해주고, reserve를 돌며 +1을 해준다. 이러면 여분이 있는데 도난당한 학생은 0 -1 +1 = 0이되서 나눠줄순 없지만, 수업에 참가할 수 있는 상태가 된다.
그런뒤 학생들을 돌면서
1.맨앞의 학생이 아니면서 해당학생의 뒷번호 학생이 체육복이 없는상태이고, 해당 학생이 여분의 체육복을 가지고있으면 뒷번호학생++, 자신--
2.맨 뒤의 학생이 아니면서 해당학생의 앞번호 학생이 체육복이 없는상태이고, 해당 학생이 여분의 체육복을 가지고 있으면 앞번호학생++,자신--
마지막으로 모든학생을 탐색하며 0이상인 학생들의 수를 세어주면 된다.
#include <string> #include <vector> using namespace std; int solution(int n, vector<int> lost, vector<int> reserve) { int answer = 0; vector<int> st(n,0); for(int i:lost){ st[i-1]--; } for(int i:reserve){ st[i-1]++; } for(int i=0;i<st.size();i++){ if(i!=0&&st[i-1]==-1&&st[i]==1){ st[i-1]++; st[i]--; continue; } if(i!=st.size()-1&&st[i+1]==-1&&st[i]==1){ st[i+1]++; st[i]--; } } for(int i:st){ if(i>=0){ answer++; } } return answer; }
반응형'문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 가운데 글자 가져오기 (0) 2020.11.24 [프로그래머스] 2016년 (0) 2020.11.24 [프로그래머스] K번째수 (0) 2020.11.24 [프로그래머스] 모의고사 (0) 2020.11.23 [프로그래머스] 완주하지 못한 선수 (0) 2020.11.23 댓글