001
오늘의 코드카타
(26) 프로그래머스 [Python] Lv.1 음양 더하기
문제 설명
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
제한사항
- absolutes의 길이는 1 이상 1,000 이하입니다.
- absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
- signs의 길이는 absolutes의 길이와 같습니다.
- signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다
입출력 예
| absolutes | signs |
| [4,7,12] | [true,false,true] |
| [1,2,3] | [false,false,true] |
입출력 예 설명
입출력 예 #1
- signs가 [true,false,true] 이므로, 실제 수들의 값은 각각 4, -7, 12입니다.
- 따라서 세 수의 합인 9를 return 해야 합니다.
입출력 예 #2
- signs가 [false,false,true] 이므로, 실제 수들의 값은 각각 -1, -2, 3입니다.
- 따라서 세 수의 합인 0을 return 해야 합니다.
▼ 내가 짠 코드...
def solution(absolutes, signs):
answer = []
c = -1
for i in signs:
if i == True:
c += 1 # 반복문 한 사이클 돌 때마다 1씩 더하기
answer.append(absolutes[c]) # absolutes 리스트의 c번째 값을 추가
else:
c += 1
answer.append(absolutes[c] * -1) # absolutes 리스트의 c번째 값을 음수로 만들어 추가
return sum(answer)
일단 오늘 문제는 그리 어렵지 않게 통과...했다만, 딱 봐도 복잡 지저분하죠?
좀 더 멋지게😎 짜는 방법을 알고 싶어서 저의 항시대기 파이썬 과외쌤께 SOS침


💡 새롭게 알게 된 것들 정리
1. 두 배열을 동시에 묶어 돌릴 땐 zip() 함수 !
원래는 인덱스용 변수 c를 따로 만들어서 1씩 더해가며 두 배열(absolutes, signs)의 값을 매칭했으나...zip() 함수를 쓰면 이 노가다를 단 한 줄로 줄일 수 있다!
- 원리: zip(배열A, 배열B)를 쓰면 두 배열에서 원소를 하나씩 세트로 꺼내서 튜플로 묶어줌.
- 적용:
for num, sign in zip(absolutes, signs): # num에는 절대값, sign에는 부호(True/False)가 알아서 쏙쏙 매칭됨!
2.if sign == True:는 굳이? 그냥 if sign:
signs 배열에 담긴 값 자체가 이미 True나 False 같은불리언(Boolean) 데이터!
- 원리:i f 문은 뒤에 오는 조건이 '참'이면 실행됨. 즉,sign 자체가 이미 True라면 if True == True:라고 구구절절 쓸 필요 없이그냥 if sign:만써도 파이썬이 알아서 찰떡같이 알아듣는다.
3.음수 만드려고 * -1도 굳이;;; 대신 그냥 빼버리기
부호가 False일 때, 정수를 음수로 바꾸려고 num * -1을 한 뒤에 결과 배열에 추가했음.
근데 생각해보니까 어차피 총합을 구하는 문제잖아? ㅎㅎ;;
- 원리: 어떤 값을 더한 뒤에 -1을 곱한 값을 또 더하는 구조라면, 애초에 총합 변수(answer)에서 그 값을그냥 빼버리면(-= num)됨
- 효과: 불필요한 곱셈 연산도 줄이고, 임시 리스트를 만들어서 sum()을 또 돌릴 필요가 없어진다!!
★ 최종 요약 (비포&애프터)
- Before (끄응...;): 리스트 만들고, 인덱스 변수 c 키우고, == True 확인하고, * -1 곱해서 리스트에 넣고, 마지막에 sum() 돌리고....... (굳이...의 연속으로 굉장히 복잡해짐 😅)
- After (인사이트 반영): zip()으로 묶고, if sign:으로 체크해서, 바로 += 또는 -= 로 합산하기!
def solution(absolutes, signs):
answer = 0
for num, sign in zip(absolutes, signs):
if sign:
answer += num
else:
answer -= num
return answer
이 개념들에 더해 화요일에 정리한 리스트 컴프리헨션 삼항 연산자로 정리하면 아래처럼 한줄컷도 가능하다.
def solution(absolutes, signs):
return sum(num if sign else -num for num, sign in zip(absolutes, signs))
002
오늘 학습한 내용
📕 전처리 & 시각화 Library 개인 과제
내일까지 제출해야 하는 과제가 있어서 오늘 다 끝내버렸다.
Lv. 1부터 3-2까지는 무난하게 잘 풀렸다 !
(당연함. 기억 안 나는 함수는 싹 다 찾아보면서 했음.)
(양심껏 Ai는 안 씀. 물론 이것도 당연함...^^)
제일 마지막 문제는 데이터를 살펴보고 자유롭게 시각화해보는 것이었는데, 어떤 데이터를 살펴볼지 주제를 선정하는 게 꽤 오래 걸렸다.
그래서 저는 어떻게 했냐면요...👇👇👇
1. 분석 개요 & 목적
주어진 제조 공정 데이터를 바탕으로 데이터 전처리, 시계열 그룹화, 선 그래프 시각화 까지 직접 수행해보았다!
데이터셋이 가진 제약 사항(데이터 부족 및 결측치)을 생각하면서, 그 안에서 도출할 수 있는 최선의 인사이트를 찾는 것에 목적을 두고 시작했다.
- 분석 주제: 시계열 흐름에 따라 라인별 가동 시간은 어떻게 변할까?
- 목적:
- 라인별로 어느 날에 가동 시간이 가장 길었는지 알아보기.
- 시간 흐름에 따른 가동 시간의 일정한 추세가 존재하는지 살펴보기.
2. 데이터 전처리
결측치 정제 → 시계열 분석이 가능한 상태로 데이터 가공
① 결측치 확인 및 제거
df.isnull().sum()을 통해 데이터셋 전체의 결측치 현황을 파악
→ 확인 결과 operation_time_A 열에 결측치가 존재하는 것을 발견
→ 데이터 왜곡을 방지하기 위해 해당 행 제거
# operation_time_A 열의 결측치가 있는 행 제거
df = df.dropna(subset=['operation_time_A'])
② 시계열 데이터 타입 변환
기존 date 컬럼의 데이터 타입이 문자열(object)인 것을 확인
→ pd.to_datetime()을 활용해 datetime 타입으로 변환
3. 데이터 집계 및 시각화
① 날짜별 가동 시간 평균치 그룹화
동일 날짜에 존재하는 데이터들을 통합하기 위해 groupby('date')를 적용하고,
각 라인(A, B, C)의 가동 시간 평균값(mean)을 산출
② 선 그래프(Line Plot) 생성
시간의 흐름에 따른 연속적인 변화 추이를 관찰하기 가장 적합한 선 그래프를 선택.
# 시계열 추이 관찰을 위한 선 그래프 생성
time_by_date.plot(kind="line", figsize=(10,6))
plt.title("Average operation time by date")
plt.xlabel("Date")
plt.ylabel("time")
plt.grid(True)
plt.show()

4. 분석 결과 및 인사이트
A, B 라인은 1월 3일에 가동 시간 정점을 찍은 뒤, 다음 날인 4일에 감소하는 유사한 흐름을 보인 반면,
C 라인은 기간 내내 가동 시간이 계속 증가하는 우상향의 흐름을 보였다.
모든 날짜에서 가동 시간의 길이는 C > B > A 순으로 고정되어 나타났다.
그러나 해당 분석은 단 4일간의 데이터만을 바탕으로 수행되었기 때문에 일반화가 어렵고, 확실한 경향성 파악을 위해서는 추가적인 데이터 수집이 필요하다.
+
오늘 라이브세션 내용은 시간 없음 이슈로 정리를 못했다... 내일 할게요

'Today I Learned' 카테고리의 다른 글
| [내일배움캠프 QA/QC 6기] TIL #019 기초 프로젝트 start (0) | 2026.06.08 |
|---|---|
| [내일배움캠프 QA/QC 6기] TIL #018 (0) | 2026.06.05 |
| [내일배움캠프 QA/QC 6기] TIL #016 ✨데이터 시각화 (with Matplotlib)✨ (1) | 2026.06.02 |
| [내일배움캠프 QA/QC 트랙 6기 본캠프] TIL #015 데이터 전처리 & 시각화 (0) | 2026.06.01 |
| [내일배움캠프 QA/QC 트랙 6기 본캠프] TIL #014 🐼s (1) | 2026.05.29 |