프로그래머스 level1의 문제이다.
오늘 하루종일 알고리즘 문제를 너무 못풀었다.
!자신감 회복!을 위해 푼 문제였는데 처음에 오답이 나와서 정말 당황했다.
하지만 문제를 다시 읽어보니...함정이 있었다!
그 함정을 빼면 쉬운 문제였다
정말 많은 풀이들이 생각이 났다.
문제자체는 쉽지만 어떤 풀이를 선택하냐에 따라 받을 수 있는 점수가 달라질 것 같았다.
그래서 level1인 만큼 원초적인 풀이를 해보고 싶었다.
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer =0;
int student[]=new int[n];
for(int i=0;i<n;i++) {
student[i]=1;
}
for(int i=0;i<reserve.length;i++) {
student[reserve[i]-1]++;
}
for(int i=0;i<lost.length;i++) {
student[lost[i]-1]--;
}
if(student[0]==0) {
if(student[1]==2) {
student[0]=1;
student[1]=1;
}
}
if(student[n-1]==0) {
if(student[n-2]==2) {
student[n-1]=1;
student[n-2]=1;
}
}
for(int i=1;i<n-1;i++) {
if(student[i]==0) {
if(student[i-1]==2) {
student[i-1]=1;
student[i]=1;
continue;
}
else if(student[i+1]==2){
student[i]=1;
student[i+1]=1;
continue;
}
}
}
for(int i=0;i<n;i++) {
if(student[i]>=1) {
answer++;
}
}
return answer;
}
}
일단 모든 학생들이 학교에 올 땐 체육복이 있었으니 1로 초기화한다.
그 뒤 여벌의 체육복과 잃어버린 체육복을 계산해준다.
여벌의 체육복을 가져온뒤 도난당한 것이 순서이다. 도난당한 뒤에 여벌의 체육복이 생기는 것이 절대 아니다
그러니 먼저 여벌의 체육복을 가져온 학생들에게는 1이 아닌 2를 넣어주어 여벌의 체육복을 표현해준다.
도난당한 학생들은 체육복이 0벌이니 0으로 세팅해준다.
그리고 계속 포문을 돌며 각 학생들의 체육복 개수와 앞뒤의 학생들의 체육복 개수를 고려해 체육복 개수의 배열을 바꿔준다.
그리고 마지막에 체육복을 1개 이상가진 학생들의 수를 세면 끝!
'Computer Engineering > 알고리즘 테스트' 카테고리의 다른 글
코드업[3321]- 최고의 피자🍕 (0) | 2021.01.03 |
---|---|
코드업[3120]-리모컨 (0) | 2021.01.03 |
프로그래머스 코딩테스트 문제: 카펫 (0) | 2020.04.14 |
프로그래머스 코딩테스트 문제: 스킬트리 (0) | 2020.04.10 |
프로그래머스 코딩테스트 문제: 다리를 지나는 트럭 (0) | 2020.03.14 |