- 문제 )
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- Sol )
문제를 읽고 접근방법은 일단 처음 드는 생각은 이 경우의 수는
1. 여분이 있는 것과 도난 당한 것을 구분 -> 이유? 여분이 있었는데 도난 당했을 수도 있어서
2. 만약 체육복이 도난 당했다
if 왼쪽에 여분 체육복 있음 / 왼쪽 빌림 break
else if 오른쪽에 여분 체육복 있음 / 오른쪽 빌리고 break
else 왼쪽 오른쪽 여분 체육복이 없음 ? 그럼 얘는 옷이 없음
- Code )
#include <string>
#include <vector>
#include<iostream>
#include<cstdio>
using namespace std;
int stu[31];
// 여벌옷을 가지고 온 학생도 도난 당할 수 있다, 이때는 남은 체육복이 하나이기에 다른이에게 체육복 빌릴수 없
int solution(int n, vector<int> lost, vector<int> reserve) {
int answer=0;
int sum =0;
for(int i=0;i<reserve.size();i++){
stu[reserve[i]]+=1;
}
for(int i=0;i<lost.size();i++){
stu[lost[i]]-=1;
}
for(int i=1;i<=n;i++){
if(stu[i]==-1){
if(stu[i-1]==1){
stu[i-1]=stu[i]=0;
} else if(stu[i+1]==1){
stu[i+1]=stu[i]=0;
}
}
}
for(int i=1;i<=n;i++){
if(stu[i]!=-1) answer++;
}
return answer;
}
- Result )
- Ref )
문제좀 잘 읽자.. 처음에는 괜히 시간줄여본다고 lost에서 pop해서 할까 했는데 생각해보니 시간초과 날 것 같았다.
그리고 처음에 문제를 대충 읽어서.. 저 빨간 박스를 보지 못했다.ㅜ
'Algorithm' 카테고리의 다른 글
[개념] Union-Find 기법 (0) | 2020.10.21 |
---|---|
[프로그래머스]이중우선순위큐 - 힙 (0) | 2020.06.25 |
[프로그래머스] 디스크컨트롤러 - 힙 (0) | 2020.06.24 |