728x90
반응형
체육복(프로그래머스 Lv.1)
https://school.programmers.co.kr/learn/courses/30/lessons/42862
풀이 과정
처음에는 아래의 코드로 풀었는데, 테스트 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
반응형
'Python공부 > 프로그래머스' 카테고리의 다른 글
(Python) 비밀지도 (프로그래머스 Lv.1)/.zfill() (0) | 2023.06.16 |
---|---|
(Python) 덧칠하기 (프로그래머스 Lv.1) (0) | 2023.06.16 |
(Python) 숫자 짝꿍 (프로그래머스 Lv.1) (0) | 2023.06.15 |
(Python) 크기가 작은 부분 문자열(프로그래머스Lv.1)/[:]의 활용 (0) | 2023.06.14 |
(Python)시저 암호(프로그래머스Lv.1) (0) | 2023.06.14 |