728x90
전에 c++로 풀었던 적이 있는 문제여서 파이썬으로만 풀어보았다
근데 알고리즘이 또 생각이 안나서 결국 내가 구현한 코드를 참고해서 풀었다,,,씨,,,
다른 사람들 풀이를 보니까 다들 엄청 깔끔하게 풀었던데,,,
난 내 코드가 직관적이라 좋다ㅠㅠ
def solution(n, lost, reserve):
answer = 0
student = [1 for i in range(n)]
for i in range(len(lost)):
student[lost[i]-1] -= 1
for i in range(len(reserve)):
student[reserve[i]-1] += 1
for i in range(n):
if student[i]==2:
if i != 0 and student[i-1]==0:
student[i-1] = 1
student[i] = 1
if student[i]==2:
if i != n-1 and student[i+1]==0:
student[i+1] = 1
student[i] = 1
for i in range(n):
if student[i] >= 1:
answer += 1
return answer
나는 일단 학생 수 만큼 배열을 만들고, 리스트를 모두 1로 초기화한다 -> 체육복 개수
그리고 lost와 reserve 리스트 크기만큼 반복하면서 lost는 -1, reserve는 +1해준다
그리고 다시 학생 수만큼 반복하면서 만약 현재 학생이 체육복이 2개면 앞에 먼저 확인해서 앞에 없으면 빌려주고, 다시 또 확인해서 2개면 뒤에 없는 학생이 있으면 빌려주는 식으로 구현했다
그리고 다시 반복문을 돌면서 체육복이 1개 이상 있는 학생 수를 센다
대충 시간복잡도가 O(3n)정도 드는 것 같다,,
사실 이것도 결국 O(n)이라 효율성은 나쁘진 않을지도..?
다른 사람 코드는 이해가 가지 않는다,,
걍 나만의 코드를 짜는게 중요한 것 같다!
처음부터 안된다고 실망하지 말고 꾸준히 해보자!!
728x90
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[스택/큐] Level 2 프린터 (0) | 2022.01.03 |
---|---|
[스택/큐] Level 2 기능개발 (0) | 2022.01.02 |
[해시] Level 3 베스트앨범 - C++ (0) | 2021.12.26 |
[해시] Level 3 베스트앨범 - 파이썬 (0) | 2021.12.26 |
[해시] Level 2 전화번호 목록 (0) | 2021.12.24 |
댓글