개인정보 수집 유효기간
1. today와 수집 날짜의 차이를 구하는 date_diff 모듈을 만든다
2. 수집정책이 파라미터마다 다르니 make_terms_dict를 만들어 유효기간을 불러올 수 있도록 해준다
3. 각 privacy의 case마다 날짜차이를 구해 유효기간을 넘은 인덱스를 저장해준다
유효기간을 일 수로 치환하여 월단위로 계산했을 때
발생하는 예외를 datediff 모듈의 계산법을 통해 없애주었다. <주석 확인>
def solution(today, terms, privacies):
answer = []
terms_dict = make_terms_dict(terms) # 유효기간 정보를 사전형으로 변환
for idx, privacy in enumerate(privacies):
date = privacy.split(' ')[0]
cat = privacy.split(' ')[1]
date_diff = datediff(today, date) # 날짜 차이 구하기
if date_diff >= terms_dict[cat] * 28: # 차이와 유효기간이 같아지는 시점부터 만료
answer.append(idx+1) # 1번 인덱스부터 시작
return answer
def make_terms_dict(terms):
dct = {}
for term in terms:
cat = term.split(' ')[0]
period = int(term.split(' ')[1])
dct[cat] = period
return dct
def datediff(today, date):
t_ymd = today.split('.')
t_year, t_month, t_day = int(t_ymd[0]), int(t_ymd[1]), int(t_ymd[2])
d_ymd = date.split('.')
d_year, d_month, d_day = int(d_ymd[0]), int(d_ymd[1]), int(d_ymd[2])
year_diff = t_year - d_year # > 0
month_diff = t_month - d_month # 양수 or 음수 or 0
day_diff = t_day - d_day # 양수 or 음수 or 0
if month_diff >= 0: # 오늘의 월이 기준월을 넘었을 때 1년 단위가 인정됨
if day_diff >= 0: # 오늘의 일이 기준일을 넘었을 때 월 단위가 인정됨
diff = year_diff * 12 * 28 + month_diff * 28 + day_diff
else:
diff = year_diff * 12 * 28 + (month_diff - 1) * 28 + (28 + day_diff)
else: # 오늘의 월이 기준월을 넘지 못했을 때 마지막 1년 단위가 인정이 안됨
if day_diff >= 0: # 오늘의 일이 기준일을 넘었을 때 월 단위가 인정됨
diff = (year_diff - 1) * 12 * 28 + (12 + month_diff) * 28 + day_diff
else:
diff = (year_diff - 1) * 12 * 28 + (12 + month_diff - 1) * 28 + (28 + day_diff)
return diff
https://school.programmers.co.kr/learn/courses/30/lessons/150370
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
공원산책
1. start point를 찾는다
2. 한 스텝씩 이동하여 X와 벽을 만나는 지 검사한다.
3. 방향에 따라 이동할 수 있도록 사전을 만들어준다
4. route별로 이동할 수 있도록 for문을 걸어준다.
※ X나 벽을 넘으면 이동했던 route를 모두 취소해야한다.
<제자리 걸음이 아님!>
코딩을 할 땐 늘 예외 상황을 짐작하며 하자
def solution(park, routes):
start_point = find_start_point(park) # 시작 지점 S 찾기
hint = {'N':[-1,0],'S':[1,0],'E':[0,1],'W':[0,-1]} # 방향별 이동 좌표
for route in routes:
direction = route.split(' ')[0] # "E 1"을 공백 기준으로 분리
distance = int(route.split(' ')[1]) # int형으로 변환
# rule : 벽을 만나거나 벽 밖으로 나가면 원래 지점으로 돌아온다
start_point = move_one_step(start_point, distance, direction, park) # route 별로 좌표 계산
return start_point
def find_start_point(park):
for y in range(len(park)): # 두번의 for 문을 쓸 필요 없이
for x in range(len(park[y])):
if park[y][x] =='S':
return [y, x]
# if 'S' in y:
# return [y_idx, y.index('S')] # 코드 가독성 향상 버전
def move_one_step(start_point, distance, direction, park):
initial_y, initial_x = start_point[0], start_point[1] # 다시 돌아갈 수 있도록 initial 좌표를 구해놓는다
y, x = start_point[0], start_point[1] # 움직일 좌표를 대입한다
for d in range(distance):
one_move = [a+b for a,b in zip(direction,start_point)] # 한 칸 이동
y, x = one_move[0], one_move[1]
try:
if (park[y][x] != 'X') and (0<= y <=len(park)) and (0<= x <= len(park[y])): #조건 검사
start_point = [y,x] # 한칸 전진
else:
return [initial_y, initial_x] # 부합하지 않으면 처음 좌표 return
except:
return [initial_y, initial_x] # 에러가 뜨면 (인덱스) 처음 좌표 return
return [y,x]
https://school.programmers.co.kr/learn/courses/30/lessons/172928
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
바탕화면 정리
1. 필요한 좌표는 파일이 있는 왼쪽, 오른쪽, 위, 아래의 최소값과 최대값이다.
<왼쪽, 위> 좌표와 <오른쪽, 아래> 좌표를 알면 된다는 뜻
2. 위 아래, 좌우의 리스트를 만들어 파일이 있는 인덱스를 저장해준다
3. 각 요소를 append해준다
def solution(wallpaper):
answer = []
# 위부터 아래로 가면서 #이 처음 발견되는 지점과 마지막으로 발견되는 지점을 찾는다
# 왼쪽에서 오른쪽으로 가면서 #이 처음 발견되는 지점과 마지막으로 발견되는 지점을 찾는다
tb = []
lr = []
for y_idx, y in enumerate(wallpaper):
for x_idx, x in enumerate(y):
if x == '#':
lr.append(x_idx)
tb.append(y_idx)
answer.append(min(tb))
answer.append(min(lr))
answer.append(max(tb)+1)
answer.append(max(lr)+1)
return answer
https://school.programmers.co.kr/learn/courses/30/lessons/161990
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
'Development' 카테고리의 다른 글
pyfunctional - seq 오브젝트에 외부 메서드 추가하기 (2) | 2025.05.03 |
---|---|
함수형 프로그래밍의 타입 시스템 (0) | 2025.05.01 |