오늘은 파이썬 데이터 종합반 강의 4강을 듣고 본격적으로 코드카타를 시작했다. 오늘은 코딩 문제를 풀어보며 흥미로웠거나 어려웠던 내용들에 대해서 적어보려고한다.
1> 코드카타 5번 문항

정수 두개를 입력받아 두 수가 같은지 여부를 판단하는 문제였다.
우선 코드를 작성전 다음과 같이 알고리즘을 구성했다
1) IF문으로 두개의 숫자를 비교한다
2) 같으면 1을 retrun, 다르면 2를 return 하도록 한다.
def solution(num1, num2):
if (num1==num2):
return 1
else:
return -1
알고리즘에 따라 코드를 작성했고 정상적으로 작동했다. 쉬운 문제였지만, 흥미로웠던 점은 다른 사람들의 코드를 볼 수 있고 사람마다 다양한 방법으로 같은 역할을 수행하는 코드를 작성한다는 것이었다.
def solution(num1, num2):
return 1 if num1==num2 else -1
return 이후에 조건문을 사용하여 코드를 엄청나게 짧게 작성한 사람도 있었고
def solution(num1, num2):
return sum([num1==num2])*2-1
True = 1, False = 0으로 계산되는것을 이용하여 if문을 사용하지 않고 작성한 사람도 있었다.
이렇게 스스로 알고리즘을 짜고 코드를 작성한 뒤 다른 사람들의 코드를 읽고 이해하며 사고를 넓힐 수 있었다.
2> 튜터님 세션 문제

나머지가 1이되는 가장 작은수 찾기 문제이다.
1) 가장 작은 수를 찾아야 하므로, 1부터 시작해서 순차적으로 수를 찾는다
2) 입력받은 수의 크기를 모르기 때문에 범위를 정해주지 않는 반복문 while을 사용한다
이 두가지 아이디어에 착안하여 코드를 작성해보았다.
def solution(n):
i=1
while (n>=i):
if(n%i==1):
return i
i+=1
즉, 1부터 시작해서 조건을 만족하는 수를 찾는 순간 바로 return을 통해 함수가 종료되는 방식으로 작성했다.
나는 코드를 정말 깔끔하게 작성했다고 생각했지만, 코딩의 세계는 무궁무진했다.
def solution(n):
answer = []
for i in range(1, n):
if n % i == 1:
answer.append(i)
return min(answer)
우선 튜터님의 풀이를 확인해봤을때 answer이라는 리스트에 조건을 만족하는 수를 다 넣고, min()을 이용하여 가장 작은 수를 찾는 방법이었다. 이러한 방법을 보면서 단순하게 지금 당장의 문제를 해결하기 위한 코드가 아닌, 약간만 수정해서 n번째로 큰 수 찾기 이런식으로 응용할 수 있는 방식을 대비하는 사고를 엿볼 수 있었고 앞으로 코드를 작성할 때 이러한 방식으로 생각하면서 코드를 짜봐야겠다고 다짐했다.
def solution(n):
# 나머지가 1이 되려면 나누는 수 x는 최소 2 이상이어야 합니다.
# range(시작, 끝) -> 2부터 n-1까지 확인합니다.
for i in range(2, n):
if n % i == 1:
return i # 가장 먼저 조건을 만족하는 i가 최소값입니다.
또한 for문은 사용하기 어렵다고 생각했는데, range의 끝을 n으로 설정하면 while과 동일하면서 무한루프의 위험성이 없는 코드를 작성할 수 있는 것을 알게되었다. 앞으로는 while 대신 어떻게 하면 for문을 사용하여 작성할 수 있는지 고민해봐야겠다.
3> 튜터님 세션 과제

# 전체 품목 데이터 (품목명: 중량(g))
factory_products = {
"Sausage_A": 90,
"Sausage_B": 120,
"Sausage_C": 110,
"Sausage_D": 115,
"Sausage_E": 98,
"Sausage_F": 70,
"Sausage_G": 101
}
# HACCP 검사를 받은 품목 리스트
haccp_tested = ["Sausage_A", "Sausage_B", "Sausage_D"]
# 중량 기준 (g)
weight_standard = 100
def untested(factory_products,haccp_tested):
return HACCP 미검사 품목 리스트
def underweight(factory_products):
return untested 항목 중 중량미달에 해당하는 품목의 갯수
이번 과제는 좀 어려운 과제였다. 이때까지 배운 내용들을 잘 응용해야했기 때문이라 앞선 강의 내용들을 찾아보며 작성했다.
untested() 함수
아이디어
1. factory_products는 딕셔너리고 미검사 품목 리스트는 리스트였다. 따라서 factory_products의 key값만 뽑아내서 리스트로 만든다.
2. for문을 통해서 뽑아낸 key값들이 haccp_tested 리스트 안에 있는지 확인하고 없을 경우 answer 리스트에 넣는다
def untested(factory_products,haccp_tested):
keys = factory_products.keys()
answer = []
for i in keys:
if i not in haccp_tested:
answer.append(i)
return answer
처음에 조건문을 두개를 사용하여 작성하려고 했지만, 코드가 복잡해지고 내가 원치 않는 데이터가 answer 리스트 안에 들어가서 조건문 not in을 이용하는 방법을 채택했다.
def untested(factory_products, haccp_tested):
untested_products = []
for i in factory_products.keys():
if i not in haccp_tested:
untested_products.append(i)
return untested_products
print(untested(factory_products, haccp_tested))
튜터님의 경우 유사하게 작성하셨지만, keys라는 리스트를 따로 두시지 않고 for문에 바로 factory_products.keys()를 쓰신걸 확인할 수 있었다.
underweight() 함수
아이디어
1) untested()함수를 이용하여 미검사 품목 리스트를 가져온다
2) 미검사 품목 리스트는 factory_products의 key값을 가지고 있으므로 해당 key값의 value 값을 get()으로 가져오고 조건문으로 비교하여 중량 미달에 해당하는 품목의 개수를 찾는다.
def underweight(factory_products):
target = untested(factory_products,haccp_tested) #untested 항목(key값 리스트)
count = 0
for i in target:
if factory_products.get(i) < weight_standard:
count += 1
return count
즉, factory_products 딕셔너리에 미검사 품목에 해당하는 key값을 넣어 count해주었다.
def underweight(factory_products, haccp_tested, weight_standard):
# HACCP 미검사 품목 찾기
untested_products = untested(factory_products, haccp_tested)
underweight_products = []
for product in untested_products:
# 중량 기준 미달인 품목 찾기
if factory_products[product] < weight_standard:
underweight_products.append(product)
return len(underweight_products)
튜터님의 경우에는, 리스트를 이용하여 작성하셨는데 count를 사용하지 않고 len()으로 코드 길이를 통해 개수를 확인한 아이디어가 참신했다.
오늘은 본격적으로 코딩 과제를 수행하기 시작했는데, 코드를 어떻게 짤지 고민하고 작성하는 과정 그리고 완성 후 다른 사람들의 코드와 비교하는 과정이 정말 재미있었다. 앞으로 나만의 코딩 기술을 갈고 닦으며 완성도 있는 코드를 작성하고싶다.
'내일배움캠프 > TIL(Today I Learned)' 카테고리의 다른 글
| [2026/03/23] 내일배움캠프 11일차 TIL (0) | 2026.03.23 |
|---|---|
| [2026/03/20] 내일배움캠프 10일차 TIL (0) | 2026.03.20 |
| [2026/03/18] 내일배움캠프 8일차 TIL (0) | 2026.03.18 |
| [2026/03/17] 내일배움캠프 7일차 TIL (0) | 2026.03.17 |
| [2026/03/16] 내일배움캠프 6일차 TIL & KPT 회고 (0) | 2026.03.16 |