오늘은 본격적으로 코딩을 하며 머리를 쓰기 시작했다. 개인 과제와 튜터님의 파이썬 교실 자료에서의 실습 과제들이 상당히 생각할 요소들이 많고 filter, map, lambda 등 내가 이전에 써보지 않은 메서드를 사용해서 익숙하지 않았기 때문이다.
오늘은 창의적이라고 생각했거나 생각하는 시간이 좀 소요되었던 내용들에 대해서 TIL을 작성해보려고한다.
1) 코트카타 8번문항 각도기

아이디어
1. if문을 이용하여 angle 조건 별로 정해진 숫자를 return
2. 범위 외의 숫자를 입력받았을 때 오류를 print
def solution(angle):
if 0<angle<90:
return 1
elif angle==90:
return 2
elif 90<angle<180:
return 3
elif angle==180:
return 4
else:
return print("잘못된 값을 입력하셨습니다.")
아이디어를 바탕으로 if문을 사용하여 간단하게 코드를 작성할수 있었다. 깔끔하게 풀었다고 생각했지만, 다른 사람의 풀이를 보고 나의 사고가 아직은 좁다는 것을 느꼈다.
def solution(angle):
answer = (angle // 90) * 2 + (angle % 90 > 0) * 1
return answer
return 값이 1~4 임을 이용하여, angle과 return 값의 수학적 관계를 바탕으로 작성한 코드를 발견했는데 한 눈에 코드의 역할을 알아보기 힘들다는 단점은 있지만 이렇게 수학적으로도 코드에 접근해볼 수 있구나라는 사실을 알게되어 다음에 꼭 써먹어봐야지라고 생각했다.
> 코드를 작성할 때, 수학적인 접근을 시도해볼 것. 또한, 알아보기 힘들 수 있으므로 주석으로 부연 설명을 추가할 것.
2) 파이썬_개인과제 1-2:리스트
# 다음 코드는 리스트에 새로운 요소를 추가하고, 특정 요소를 출력하는 문제입니다.
# 빈칸에 들어갈 코드를 완성하세요!
colors = ["red", "green"]
colors.___("blue") # 리스트에 "blue" 추가
print(colors[___]) # "green"이 출력되도록 하세요
1단계 문제중 리스트에 관한 간단한 문제로, 어렵지 않게 풀 수 있었다.
colors = ["red", "green"]
colors.append("blue") # 리스트에 "blue" 추가
print(colors[1]) # "green"이 출력되도록 하세요
하지만, append의 경우 리스트의 가장 마지막에 새로운 요소를 추가하는 메서드이기 때문에 코드의 문제 조건이 달라졌을 때 유연하게 사용할 수 없다고 느꼈다.
colors = ["red", "green"]
colors.insert(1,"blue") # insert() 메서드를 사용하여 중간에 추가해봤습니다.
print(colors[1])
그래서 리스트 관련 메서드를 찾아봤는데, insert()를 이용하여 원하는 index에 값을 추가할 수 있음을 확인했다.
1. 문제 조건이 blue를 print 하라고 바뀌었을때를 가정했고
2. append를 사용할 경우 index를 찾아서 코드의 값을 바꿔주어야하니 번거롭다고 느꼈기 때문에
3. insert() 메서드를 이용하여
4. blue를 insert()할때의 index와 print 할 때의 index를 일치 시켰다.
i = 0
colors.insert(i,"blue") # insert() 메서드를 사용하여 중간에 추가해봤습니다.
print(colors[i])
더 나아가서 i라는 변수를 추가해서 일치시킨 index 값을 한 변수로 제어할 수 있도록 추가해봤다.
> 코드 작성시, 문제 조건이 달라졌을 때도 사용 가능한지 확인하고 사고를 넓혀볼 것.
3) 파이썬_개인과제 1-7:혼합문제
# [문제 설명]
# 다음 코드는 리스트에서 짝수이면서 3보다 큰 수만 출력하는 코드입니다.
# 반복문과 조건문에서 빈칸을 채워 완성하세요.
numbers = [1, 2, 3, 4, 5, 6, 7]
for num in ___: # [1] 반복문 작성
if ___ % ___ == 0 and ___ > 3: # [2] 조건문 작성
print(___) # [3] 출력문 작성
기본적으로 필요한 구조가 다 짜여져있고, 빈칸만 채워넣으면 되기 때문에 문제는 쉽게 풀 수 있었다.
numbers = [1, 2, 3, 4, 5, 6, 7]
for num in numbers: # [1] 반복문 작성
if num % 2 == 0 and num > 3: # [2] 조건문 작성
print(num) # [3] 출력문 작성

하지만 print 출력값을 확인해보면 왼쪽의 결과 사진처럼 세로로 출력됨을 알 수 있었고, 이때 만약 numbers 안의 리스트의 구성 요소들이 좀 더 많아졌을 때 가독성이 나빠지겠다는 생각이 들었다.

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
for num in numbers: # [1] 반복문 작성
if num % 2 == 0 and num > 3: # [2] 조건문 작성
print(num, end=" ") # [3] 출력문 작성 / 줄바꿈 없이 출력되도록 end = " "를 추가했습니다.
따라서, print에 end=" "를 추가하여 줄바꿈 없이 출력되도록 해봤고

가로로 출력되게 하여 가시성을 높여 규칙을 한눈에 파악할 수 있도록 변경했다.
> 코드 작성시, 결과물의 가독성도 신경써볼것.
4) 파이썬_개인과제 2-1, 2-2
# 예시 데이터
numbers = [10, 20, 30, 40, 50]
def calculate_diff_temperature(numbers):
# 여기에 코드를 작성하세요
# 여기에 코드를 작성하세요
return diff_temp
diff_temp= calculate_diff_temperature(numbers)
print("온도차:", diff_temp)
2단계 과제부터는 서술형으로 자유롭게 코드를 작성할 수 있었다. 목표는 장비의 온도 목록을 활용하여, 최고 온도와 최저 온도의 차이를 구하는 함수를 작성하는 것이었는데
numbers = [10, 20, 30, 40, 50]
def calculate_diff_temperature(numbers):
diff_temp = max(numbers) - min(numbers)
return diff_temp
diff_temp= calculate_diff_temperature(numbers)
print("온도차:", diff_temp)
기존 max()와 min() 메서드를 사용하여 쉽게 해결할 수 있었다.
1. 하지만, 코드의 길이를 더 줄여볼 수 없을까?라는 생각을 했고
2. 함수 부분에서 diff_temp가 두번 사용이 되는 점
3. print에서도 diff_temp가 두번이 사용되는 점을 생각해서
4. 반복을 제거하여 코드를 줄여보자고 생각했다.
# 반복제거 1
def calculate_diff_temperature(numbers):
return max(numbers) - min(numbers)
# 반복제거 2-1
print("온도차:", calculate_diff_temperature(numbers))
# 반복제거 2-2
print(f"온도차: {calculate_diff_temperature(numbers)}")
1. 함수 부분에서의 diff_temp를 제거하고 return에 바로 넣어주었고
2. print 부분에서의 diff_temp를 제거하고 일반적인 방법과 f-string을 활용한 방법 두가지로 print문을 작성했다.
> 코드 작성시, 반복되는 변수를 제거할 수 있는지 확인 해볼 것. 하지만, 가독성이 떨어질 수 있으므로 상황에 맞게 적용.
5) 파이썬_개인과제 2-4
def find_top_seller(sales_data):
# 여기에 코드를 작성하세요
# 여기에 코드를 작성하세요
return top_product, max_sales
# 예시 데이터
sales_data = {
"Motherboard": 50,
"SSD": 2,
"Graphics Card": 30
}
print("가장 많이 판매된 제품과 수량 :", find_top_seller(sales_data))
# 실행 결과
가장 많이 판매된 제품과 수량 : ('Motherboard', 50)
제품 이름과 판매 수량이 기록된 데이터를 활용하여, 가장 많이 판매된 제품의 이름을 반환하는 함수를 작성하는 과제로, 딕셔너리의 데이터에 접근하는 것이 아직 익숙하지 않아 어떻게 해서 풀어야할지 고민을 좀 했다.
아이디어
1) key값과 value값을 각각 분리하여 리스트로 작성
2) value의 최댓값을 찾아낸다
3) value의 최댓값을 이용하여 key의 index를 찾는다 (다른 리스트로 분리되었지만, index는 동일)
def find_top_seller(sales_data):
key = list(sales_data.keys())
value = list(sales_data.values())
# 우선 key와 value값을 각각 분리하여 리스트화 했습니다
max_sales = max(value) # value값의 최대 값을 찾아냈습니다.
top_product = key[value.index(max_sales)] # 'key':value는 리스트로 나누어도 동일한 index임을 이용해서 key값을 찾았습니다.
return top_product, max_sales
sales_data = {
"Motherboard": 50,
"SSD": 2,
"Graphics Card": 30
}
print("가장 많이 판매된 제품과 수량 :", find_top_seller(sales_data))
이렇게 코드를 작성하여 문제를 해결할 수 있었지만, max_sales가 여러개일 경우 하나의 제품에 대해서만 결과를 출력하기 때문에 고민이 필요하다고 느꼈다.
1. 만약 sale_data가 { "Motherboard":50, "SSD":2, "Graphics Card":30, "HDD":50 }과 같은 형태일 경우 하나만 출력하게 된다
2. 이런 경우 (['Motherboard','HDD'],50)과 같은 형태로 출력하게 해야하지 않을까?라는 생각이 들었고
아이디어
1. top product를 리스트로 반환
2. max 값이 아닐경우 pop()메서드를 이용하여 기존 리스트에서 max가 아닌 값들을 제거한 뒤 리스트 반환해보자
라고 생각했다.
이 아이디어는 튜터님 세션을 복습한다고 아직 작성해보진 않아 다음 TIL을 작성할 때 코드를 짜서 가져오겠다.
6) 튜터님 세션 복습
오늘 튜터님의 강의에서는 List/Dict Comprehension과 lambda, map, filter에 대해서 배웠다. 이 메서드들의 경우에 코드를 읽었을때 직관적으로 이해하기 힘들어 공부를 하는데 상당한 시간이 들어갔다.
그래서 이러한 코드들을 읽을때는 나의 언어 즉 '한국어'로 코드를 읽으면서 작성하자는 규칙을 세웠다.
# 개인과제 2-5의 일부
even_numbers = [
num # 리스트에 num을 넣을것인데,
for num in numbers # numbers에서 num을 하나씩 꺼내서
if num % 2 == 0 # 짝수 조건을 만족하는 num만 넣을 것이다.
]
개인과제 2-5를 작성하면서 주석을 달아놓은 것인데, 부분별로 한국어로 주석을 달아서 코드를 이해하니 훨씬 쉽게 느껴졌다.
llst = [x**2 for x in range(11) if x%2 == 0]
그래서 튜터님 자료의 과제를 풀어볼 때 이러한 과정을 거쳐보니 여전히 어려웠지만 나름 할만하기도 했다.
1. list에 x**2를 넣을 것인데
2. range(11)에 의해 0부터 10까지의 x를 넣을거고
3. x%2 == 0 즉 짝수 조건을 만족하는 x만 넣을것이다.
data = [1, 2, 3, 4, 5, 6]
# 홀수만 뽑아서 3배로 만들기
이런 읽기만해도 머리가 아파오는 문제 조건도 이러한 과정을 역순으로 생각해보면
1. 홀수를 뽑아야하므로
2. filter(함수, 대상)를 이용해 홀수만 분리한다. 함수 부분은 lambda를 이용한다.
3. 3배로 만들어야하므로
4. map(함수, 대상)을 이용해 filter를 적용한 리스트를 대상에 넣는다.
5. 함수 부분은 lamda를 이용한다.
tripled_odds = list(map(lambda x: x*3, filter(lambda x: x % 2 != 0, data)))
처음에는 엄청나게 어려웠지만 이러한 사고의 흐름을 몇번 반복하니 힌트 없이도 작성할 수 있었다.
> 복잡한 코드를 작성할때, 한국어로 사고의 흐름을 작성해보고 한 줄씩 코드로 옮기자
이렇게 오늘은 평소보다 어려운 코드들을 접하며 본격적으로 코딩 훈련을 할 수 있었는데, 나름 시간도 잘 가고 코딩에 흥미가 붙기 시작했다. 3단계 과제를 도전해보기전에, 이번주에 배웠던 내용들을 한번 쭉 복습해봐야겠다.
'내일배움캠프 > TIL(Today I Learned)' 카테고리의 다른 글
| [2026/03/24] 내일배움캠프 12일차 TIL (0) | 2026.03.24 |
|---|---|
| [2026/03/23] 내일배움캠프 11일차 TIL (0) | 2026.03.23 |
| [2026/03/19] 내일배움캠프 9일차 TIL (0) | 2026.03.19 |
| [2026/03/18] 내일배움캠프 8일차 TIL (0) | 2026.03.18 |
| [2026/03/17] 내일배움캠프 7일차 TIL (0) | 2026.03.17 |