TIL - algorithm - 04
# 체육복
def solution(n, lost, reserve):
answer = 0
answer = n -len(lost) # 도난당하지 않은 학생 = 체육 수업 듣기 가능
# 여벌 체육복을 가져온 학생이 체육복을 도난당한 경우를 먼저 처리
# 이유: 여벌 체육복을 가져온 학생이 체육복을 도난당한 경우엔 다른 사람에게 체육복을 빌려줄 수 없기 때문에...
i = 0 # for 문의 맹점
while i < len(reserve): # for 문 대신 while 문을 써야, i값을 증가시키지 않고 유지하기가 쉽다.
# i값이 유지되어야 reverse의 요소가 지워진 경우, index 오류 발생x
if reserve[i] in lost: # if 조건문이 실행될 때와 else가 실행 될 때를 명확히 나눠서 흐름 처리해야 한다.
answer += 1
lost.remove(reserve[i])
reserve.remove(reserve[i])
i = i
else:
i += 1
i = 0 # 여벌 체육복을 가져오지 않은 학생이 체육복을 도난당한 경우
while i < len(reserve):
if reserve[i] - 1 in lost: # 잃어버린 학생의 번호가 자신의 바로 앞 번호인 경우
answer += 1
lost.remove(reserve[i]-1)
reserve.remove(reserve[i])
i = 0
# 잃어버린 학생의 번호가 자신의 바로 뒷 번호인 경우
elif reserve[i] + 1 in lost: # 만약 앞 번호 학생에게 여분을 빌려줬다면,
answer += 1 # 그 다음 번호 학생에겐 빌려줄 수 없기 때문에 elif 사용
lost.remove(reserve[i]+1)
reserve.remove(reserve[i])
i = 0
else: # 빌려줄 수 있는 번호가 없는 경우
i += 1
return answer
print(solution(10, [1,8], [1,3,5,6])) # 결괏값: 9
print(solution(8, [5,6], [4,5])) # 결괏값: 7
# review
-
while문
과for문
의 차이점-
while문
에선index
의 값을 조작(증가, 유지, 초기화)하기가 쉽다. -
reserve객체의 인덱스(i)에 해당하는 요소를 삭제할 경우, i값을 변화식으로 증가시키면 reserve 객체의 모든 요소를 불러올 수 없게 되며,
IndexError
가 발생한다.
-
i = 0
while i < len(reserve):
if reserve[i] in lost:
answer += 1
lost.remove(reserve[i])
reserve.remove(reserve[i]) # 해당 인덱스(i) 요소를 삭제
i = i # 인덱스 값을 유지해야, 다음 요소에 대한 처리가 가능
else:
i += 1
-
여벌 체육복을 가져온 학생이, 체육복을 도난당한 경우와 그렇지 않은 경우를 구분하여 처리하지 않으면, 여벌 체육복을 가져온 학생이 체육복을 도난당했음에도, 다른 학생에게 체육복을 빌려주는 경우의 수까지 계산이 되어 오답이 출력될 수 있다.
-
datetime
모듈을 활용하면 날짜와 시간에 관한 객체를 쉽게 만들 수 있다.(번외)-
datetime.datetime.now()
: 현재 날짜와 시간을 나타내는 datetime 객체 -
datetime.datetime.today()
: 현재 날짜와 시간을 나타내는 datetime 객체 -
datetime.datetime()
: 특정 날짜와 시간을 나타내는 datetime 객체(연, 월, 일, 시, 분, 초, 마이크로초 지정 가능) -
datetime 객체.strftime('')
: 문자열 형태(type)로 datetime객체를 나타낸다. -
datetime 객체.day
: datetime 객체의 day(일) 속성에 접근한다.- 연( year), 월(month), 일(day), 시(hour), 분(minute), 초(second), 마이크로초(microsecond) 속성에 따로 접근이 가능하다.
-
datetime 객체.weekday()
: datetime 객체의 요일을 숫자 형태로 반환- 월(0), 화(1), 수(2) ...일(6)
-
datetime.timedelta(days=수사)
: datetime 객체에서 날짜와 시간의 차이를 구할 때 사용하는 객체.
-
print(datetime.datetime.now()) # 결괏값: 2021-03-09 23:10:51.477276
print(datetime.datetime.today()) # 결괏값: 2021-03-09 23:10:51.477276
print(datetime.datetime(2020, 5, 3).strftime('%Y-%m-%d')) # 결괏값: 2020-05-03 (type: str)
print(datetime.datetime(2020, 5, 3).day) # 결괏값: 3
print(datetime.datetime(2020, 5, 3).weekday()) # 결괏값: 6 (type: int)
print(datetime.datetime(2020, 5, 3) - datetime.timedelta(days=2))
# 결괏값: 2020-05-01 00:00:00
Author And Source
이 문제에 관하여(TIL - algorithm - 04), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@fcfargo/TIL-algorithm-04저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)