Dia Egg - Shugo Chara

Python공부/프로그래머스

(Python) 체육복(프로그래머스Lv.1)

별ㅇI 2023. 6. 15. 23:45
728x90
반응형

체육복(프로그래머스 Lv.1)

https://school.programmers.co.kr/learn/courses/30/lessons/42862

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이 과정

처음에는 아래의 코드로 풀었는데, 테스트 5, 12가 실패가 떠서 93.3점이 나왔다. 

def solution(n, lost, reserve):
    answer = 0
    students, rent  = [1]*(n+1), [0]*(n+2)
    students[0],rent[0] = 3,3
    
    for lo in lost:
        students[lo] = 0
    for re in reserve:
        rent[re] = 1
        
    for i in range(1,n+1):
        if students[i] == 0:
            if rent[i] == 1: #본인이 여분을 가지고 있었을 경우
                rent[i] = 0
                students[i] =1
            elif rent[i-1] == 1: #뒤의 학생이 여분을 가지고 있었을 경우
                rent[i-1] = 0
                students[i] =1
            elif rent[i+1] == 1:#앞의 학생이 여분을 가지고 있었을 경우 
                rent[i+1] = 0
                students[i] =1
                
    for student in students:
        if student == 1:
            answer += 1
    return answer

계속 문제를 보다보니 문제에 보면 분실 당한 본인이 여분을 가지고 있을 경우 빌려줄 수 없도록 되어있는데,
그냥 본인 앞뒤에 여분있는지 확인하고 반복문돌리면 분실당한 사람이 여분을 빌려줘야하는 상황이 생긴다는 걸 깨달았다. 이래서 문제를 열심히 봐야...ㅠㅜ
n = 5, lost = [1, 2, 3], reserve =  [2, 3, 4], answer =  4
이거 넣어보시면 다들 아하 할것이다..

그래서 만점 받은 내 코드는 아래에 첨부한다.

def solution(n, lost, reserve):
    answer = 0
    students, rent  = [1]*(n+1), [0]*(n+2)
    students[0],rent[0] = 3,3
    
    for lo in lost:
        students[lo] = 0
    for re in reserve:
        rent[re] = 1
        
    for i in range(1,n+1):
        if students[i] == 0:
            if rent[i] == 1: #본인이 여분을 가지고 있었을 경우
                rent[i] = 0 #도둑맞고 본인의 여분을 쓸경우 빌려줄 수 없기때문에 이 조건 먼저
                students[i] =1
            elif rent[i-1] == 1 and students[i-1] != 0: #뒤의 학생이 여분을 가지고 있었을 경우
                rent[i-1] = 0
                students[i] =1
            elif rent[i+1] == 1 and students[i+1] != 0:#앞의 학생이 여분을 가지고 있었을 경우 
                rent[i+1] = 0
                students[i] =1
                
    for student in students:
        if student == 1:
            answer += 1
    return answer
728x90
반응형