https://school.programmers.co.kr/learn/courses/30/lessons/150370
내 코드
열심히 분화 분화 분화ㅎㅎㅎㅎ
def solution(today, terms, privacies):
answer = []
#dic으로 약관 종류, 기간 나누기
termsdic = {}
for c in terms:
key, val = c.split()
termsdic[key] = int(val)
#오늘 날짜 년 월 일 split('.')
todayY, todayM, todayD = [int(i) for i in today.split('.')]
#for range로(회원번호때문에) privacies if 약관 해서 날짜 구하는 로직
for i in range(len(privacies)):
#날짜 구하는 로직 split() 해서 약관 떼고
due, priv = privacies[i].split()
#다시 split('.')해서 년 월 일 구하고
dueY, dueM, dueD = [int(i) for i in due.split('.')]
#일-1 해서 if == 0하면 28 할당 월 -= 1
if dueD - 1 == 0:
dueD = 28
dueM -= 1
else: dueD -= 1
#월+(약관에 해당하는 기간) 해서 12로 나눠떨어지지 않으면 하면 -12 * n 해주고 년 += n
#여기서 (dueM + termsdic[priv] - 1) 에다가 12 나눈 몫을 구하는 이유는
#-1 해야 12월 이럴때 연도 +1 안되고 13월부터 연도 +1 되니까
if (dueM + termsdic[priv]) % 12 != 0:
# dueY += (dueM + termsdic[priv]) // 12 이렇게 해서 자꾸 통과 안되는 문항이 있었다
dueY += (dueM + termsdic[priv] - 1) // 12
# 심지어 이거 위아래 줄 바꿔서 dueM이 먼저 바뀌는 바람에 dueY가 잘못 바뀌는 에러도 있었다
dueM = (dueM + termsdic[priv]) % 12
else:
dueY += (dueM + termsdic[priv] - 1) // 12
dueM = 12
print(dueY, dueM, dueD)
if todayY < dueY:
continue
elif todayY > dueY:
answer.append(i+1)
else:
if todayM < dueM:
continue
elif todayM > dueM:
answer.append(i+1)
else:
if todayD > dueD:
answer.append(i+1)
else:
continue
return answer
스터디원의 기똥찬 아이디어
일수로 다 변환하여 비교하기
if 문에 = 부등호까지 들어가는 이유는 원래 유효기간 날짜를 셀때 당일부터 카운팅을 해야하는데 카운팅 안하고 일수 냅다 더해버리니 유효날짜(p_days)가 항상 +1 크게 나왔기 때문에
if 문에 의미상 if p_days < today_days 이어야 하나 if p_days <= today_days 이렇게 해야 맞는 답이 나온다
def solution(today, terms, privacies):
d = {}
answer = []
for term in terms:
t, m = term.split(' ')
d[t] = int(m) * 28
today_days = into_days(today)
for idx, p in enumerate(privacies):
date, term = p.split(' ')
p_days = into_days(date) + d.get(term)
if p_days <= today_days:
answer.append(idx + 1)
return answer
def into_days(date):
year, month, day = map(int, date.split('.'))
return year * 12 * 28 + month * 28 + day
이렇게 하니 고려해야할 사항들도 훨씬 적어지고..
문제를 풀때 생각부터 하고 풀어야하는데 문제 그대로 수학문제 풀듯이 코드로 옮길 생각부터 해서 문제다!!!!!
'코테 공부 > python' 카테고리의 다른 글
Python .find() .index() (0) | 2023.06.02 |
---|---|
Python 사소하지만 함수 호출시점, 선언시점 (0) | 2023.06.02 |
Python 문자열 계산하기, eval(expression (=식) 문자열) 함수 (0) | 2023.06.02 |
Python 비트단위 시프트 연산자 n<<숫자 (2의 숫자 제곱 곱) n>>숫자 (2의 -숫자 제곱 곱) (0) | 2023.06.02 |
Python set (0) | 2023.06.02 |