
오전 : Atani, 코드카타 문제 풀기 / 기초 프로젝트 발표 전 최종 점검
오후 : 기초프로젝트 발표회 / 밍글데이
계산된 필드와 기존 필드의 차이 이해
▶ 계산된 필드
- 데이터베이스나 파일 자체의 원본 데이터를 덮어쓰거나 스키마를 물리적으로 변경하지 않음.
- 사용자가 입력한 수식을 바탕으로 실시간으로 연산을 수행하며, 분석 도구 내에서 논리적으로만 존재하는 가상의 필드
- 이미 집계 함수(SUM, AVG 등)가 적용된 값과 적용되지 않은 행(Row) 수준의 값을 산술 연산자나 조건문으로 직접 결합할 수 없음. 두 값의 연산 시점이 다르기 때문에 집계 수준을 일치시켜야함.
- 기존의 필드에 의존성을 가짐. 따라서 수식에서 참조하는 워본 필드의 이름이 바뀌거나 삭제되면 수식이 깨지게 되며, 사용자가 수식을 직접 수정하여 올바른 필드를 다시 매핑해 주기 전까지는 유효하지 않은 상태가 됨.
코드카타
- 햄버거 만들기 -
1. 연속된 데이터에서 "최근 조건 일치 시 제거 및 복구" 패턴을 보면 stack 을 떠올릴 것.
2. 데이터가 10만~100만건 이상이면 전체를 반복 탐색하는 문자열 변환이나 단순 반복문 중첩은 금지할 것
3. 리스트의 맨 뒤 연산(append, pop, 뒤에서부터 슬라이싱)이 연속적인 시간 절약에 얼마나 유리한지 기억할 것.
def solution(ingredient):
answer = 0
stack = []
for i in ingredient:
stack.append(i) # 재료를 스택에 추가
# 스택의 뒤에서부터 4개의 원소가 [1, 2, 3, 1]인지 확인
if stack[-4:] == [1, 2, 3, 1]:
answer += 1
# 햄버거가 완성되었으므로 뒤의 4개 재료를 제거
del stack[-4:]
return answer
- 성격 유형 검사하기 -
1. 딕셔너리를 활용
배열(list) 대신 딕셔너리를 사용하여 Key:value 형태로 데이터를 관리
2. 규칙을 수식(Math)으로 단순화하는 능력
복잡한 if-else 조건문을 여러번 나열하는 대신, 기준점(4점)과의 차이를 이용해 수식으로 매끄럽게 처리
3. "사전 순 정렬" 조건의 효율적인 처리
굳이 매번 sort() 함수를 호출하거나 복잡한 정렬 알고리즘 x
데이터의 입력이나 비교 순서 자체를 사전 순으로 배치하면 단순해짐.
def solution(survey, choices):
# 1. 모든 성격 유형의 점수를 0으로 초기화
score_board = {'R': 0, 'T': 0, 'C': 0, 'F': 0, 'J': 0, 'M': 0, 'A': 0, 'N': 0}
# 2. 설문 조사 결과 순회하며 점수 누적
for s, c in zip(survey, choices):
if c < 4:
# 비동기 계열 (1, 2, 3) -> 첫 번째 캐릭터에 점수 추가
score_board[s[0]] += (4 - c)
elif c > 4:
# 동의 계열 (5, 6, 7) -> 두 번째 캐릭터에 점수 추가
score_board[s[1]] += (c - 4)
# 3. 각 지표별로 점수를 비교하여 최종 유형 결정
answer = ''
# 1번 지표
if score_board['R'] >= score_board['T']:
answer += 'R'
else:
answer += 'T'
# 2번 지표
if score_board['C'] >= score_board['F']:
answer += 'C'
else:
answer += 'F'
# 3번 지표
if score_board['J'] >= score_board['M']:
answer += 'J'
else:
answer += 'M'
# 4번 지표
if score_board['A'] >= score_board['N']:
answer += 'A'
else:
answer += 'N'
return answer
기초 프로젝트
기초 프로젝트 발표를 마치고 튜터님의 매콤한 피드백이 왔었다. 주어진 데이터셋으로 머신러닝을 제대로 활용하지 못해서 머신러닝을 활용한 이유가 없어져서 따끔한 지적을 받았다. 또한 데이터 분석 결과에 있어서 설득력이 낮아서 좀 다양한 방법으로 분석을 하여 설득력을 높이는 방향으로 다음 프로젝트를 준비해야겠다.