강의로 돌아가기
Jinho

11번 실패시 팁입니다.

처음에

앞에서 부터 차례 대로 바로 앞 사람만 빌리고,

끝까지 가면 앞에서부터 바로 없는 사람이 바로 뒷 사람만 빌리게 했는데 11번을 실패했습니다.

그런데, 앞에서 못 빌리면 바로 뒤에서 빌리게 하니 성공하네요....

작성중인 코드―solution.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
def solution(n, lost, reserve):
    students = [1 for i in range(n)] # 기본적으로 하나씩 가지고 있다.

    for i in lost: # 잃어버린 경우
        students[i-1] -= 1

    for i in range(n): # 자기가 도난 당했을 경우
        if students[i] == 0 and ((i+1) in reserve):
            reserve.remove(i+1)
            students[i] += 1

    reserve_f = reserve
    students_f = students

    # 앞에서 부터
    for i in range(n):
        if students_f[i] == 0:
            if i in reserve_f: # 앞 번호에서 빌린다.
                students_f[i] += 1
                reserve_f.remove(i)
            elif (i+2) in reserve_f: #뒷 번호에서 빌린다.
                students_f[i] += 1
                reserve_f.remove(i+2)


    answer = students_f.count(1)
    return answer
2 개의 답변
Demi

좋은 팁 감사합니다!

정찬미

저랑 같은 로직이신 것 같은 데 저는 11번 통과를 못하네요ㅠㅠ 혹시 문제점이 있을까요..

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int answer = 0;

        int[] entire = new int[n];
        //checking gym suit situation
        for(int i =0; i<entire.length;i++)
        {
            //default : have one gym suit
            entire[i]=1;

            //lost
            for(int j=0;j<lost.length;j++)
            {
                int temp =i+1;
                if(temp==lost[j])
                    entire[i]-=1;

            }

            //reserve
            for(int j=0;j<reserve.length;j++)
            {
                int temp = i+1;
                if(temp==reserve[j])
                    entire[i]+=1;
            }

        }
        //adopting greedy
        for(int i =0; i<entire.length;i++)
        {
            //current student borrowable
           if(entire[i]==2)
           {
                if((i<entire.length-1)&&(entire[i+1]==0)){
                        entire[i]--;
                        entire[i+1]++;

                        continue;
                }
               if((i>0)&&(entire[i-1]==0))
               {
                   entire[i]--;
                   entire[i-1]++;
                   continue;
               }

           }



        }
        for(int i: entire){
              if(i>=1)
                answer++;
        }
         return answer;
    }
}
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.