내일배움캠프(본캠프)

[내일배움캠프] 본캠프 3/26

anscodus 2026. 3. 26. 20:53

오늘 한 일

  • 코드카타

파이썬

더보기

16. x만큼 간격이 있는 n개의 숫자

def solution(x, n):
    answer=[]
    if x>=0 :
        for i in range(x, n*x+1,x):
            answer.append(i)
    else :
        for i in range(x,n*x-1,x):
            answer.append(i)
    return answer

 이렇게 했는데 테스트 1개에서 런타임 에러가 발생

원인을 검색해보니 x가 0일때 range(0,1,0)이 되는데, step 부분에는 0이 들어갈 수 없어서 그런거라고 한다.

그래서 0일경우를 따로 빼줌

 

수정 후

def solution(x, n):
    answer=[]
    if x>0 :
        for i in range(x, n*x+1,x):
            answer.append(i)
    elif x<0 :
        for i in range(x,n*x-1,x):
            answer.append(i)
    elif x==0 :
        answer=[0]*n
    return answer

 참고) 다른 사람 코드

def number_generator(x, n):
    # 함수를 완성하세요
    return [i * x + x for i in range(n)]
print(number_generator(2, 5))

 엄청 간단하게 끝냈다

 

 

17. 자연수 뒤집어 배열로 만들기

def solution(n):
    result = list(map(int, str(n)))
    answer = result[::-1]
    return answer

 숫자열로 바꿔서 한 자 씩 분리, 리스트로 만드는 생각은 했는데 방법을  모르겠어서 찾아보니까 map함수를 쓰면 된다고 한다. 근데 아직도 map이 뭔지는 정확히 모르겠다

 

map함수 : 

1. 기본 사용법 및 핵심 특징
  • 구문: map(function, iterable)
  • 작동 방식: 입력된 객체의 각 원소에 함수를 적용하여 새로운 객체 생성.
  • 반환값: map 객체(iterator)를 반환하므로, 실제 데이터 형태(list 등)로 보려면 형 변환이 필요.
  • 장점: for 반복문보다 간결하게 리스트의 요소를 변환할 수 있습니다.

 라고 함....

 

 

18.문자열을 정수로 바꾸기

def solution(s):
    answer = int(s)
    return answer

 처음에 문자열을 받아서 어떻게 분리를 해야하나.. 하며 한참 생각하다가 다른사람이 적은 힌트? 보고 함

생각보다 너무 간단해서 놀랐고... +,-와 같은 기호는 int에 넣었을때 문자가 아니라 부호로 인식하는구나 를 알게됨

 

 

19. 정수 제곱근 판별

def solution(n):
    digit = n**0.5
    answer = 0
    if type(digit) == "class 'float'" :
        answer = (digit+1)**2
    else :
        answer = -1
    return answer

 처음에 이렇게 썼는데 if문을 뭔가 잘못 세운 것 같았다.

그래서 제미나이한테 if문 수정 부탁함

def solution(n):
    digit = n**0.5
    answer = 0
    if digit % 1 == 0:     #digit을 1로 나눈 나머지가 0이면 정수라는 뜻
        return (digit + 1) ** 2
    else :
        answer = -1
    return answer

 if문 조건 세우기가 아직 잘 안되는듯

 

 

20. 정수 내림차순으로 배치하기

def solution(n):
 	result = list(map(int, str(n)))     #자연수 뒤집어 배열로 만들기 문제에서 가져옴
    result.sort(reverse=True)
    return int("".join(result))

처음에 아 정수를 문자열 리스트로 쪼개야겠다 해서 다른 문제에서 썼던 코드 그대로 가져왔는데 아무리 join 써도 안되길래 혹시 싶어서 map()을 빼고 돌림

def solution(n):
    result = list(str(n))
    result.sort(reverse=True)
    return int("".join(result))

 그랬더니 됨;;;

이유를 알아봤더니 위쪽의 코드(map 있는거) 에서는

정수 n -> 문자열 -> 각 글자를 다시 정수(int)로 변환 -> 리스트화 되는건데, 마지막에 join을 하기 위해서는 리스트 안의 요소가 반드시 문자열이어야 하기 때문에 안됐던것....

 

 

+) join

list = ['a', 'b', 'c']
"".join(list)  #리스트를 'abc'라는 문자열로 합쳐줌

"_".join(list)   #리스트를 'a_b_c'로, _ 구분자를 넣어서 합쳐줌

 

SQL

더보기

1. 이름이 있는 동물의 아이디

SELECT ANIMAL_ID
from ANIMAL_INS
WHERE NAME is not NULL;

 처음에 is not null  했는데 안되길래 오랜만에 해서 까먹었나 싶었다

찾아보니까 마지막에 ;을 안붙여서 그런듯

  • 데이터 전처리&시각화 강의 3챕터

 

  • 데이터 분석 입문(라이브 세션) 복습 & 실습
더보기

1) 데이터 준비 및 시계열 변환

# 2. 가상의 날짜 데이터 생성 (datetime 변환 실습)
# 2024-01-01부터 데이터 개수만큼 날짜 생성
# Hint: pd.date_range()

dates = pd.date_range(start="2024-01-01", periods=len(df), freq='D') # 코드를 입력하세요
df['order_date'] = dates

 pd.date_range 참고 글

https://data-minggeul.tistory.com/9

 

pandas.date_range - 주기적인 날짜 데이터 생성하기

날짜 데이터의 간격이 규칙적이지 않은 경우를 다룰 때, 원하는 주기의 날짜 데이터를 생성하기 위해 pandas의 date_range 함수(메서드)를 활용할 수 있다. 이번 글에서는 date_range의 인자와 주기 설정

data-minggeul.tistory.com

이 문제에서는 end가 명확하지 않고 데이터 개수만큼 날짜데이터 생성이 목표여서 periods를 활용해야함

-> periods(생성하려는 날짜의 개수)를 df의 개수만큼 (len(df))

-> freq(생성하려는 날짜들의 간격(주기)) D(기본값)

 

# 3. 날짜가 제대로 들어갔는지, 타입 확인
 # order_date가 datetime64인지 확인
display(df.info())

# 3. 날짜가 제대로 들어갔는지, 타입 확인
df[['order_date','day']]

 

 

 

 

 2) 중복 데이터 제거하기

# [상황 설정] 강제로 중복 데이터 만들기 (실습용)
# 첫 5줄을 복사해서 데이터 끝에 붙여넣음

df_dirty = pd.concat([df, df.iloc[:5]])

print(f"중복 제거 전: {len(df_dirty)}행")
# Output: 중복 제거 전: 249행 

df_dirty.duplicated()

# 1. 중복 데이터가 있는지 확인


print("중복된 행 개수:",  df_dirty.duplicated().sum()) 

# Output: 중복된 행 개수: 5
      

# 2. 중복 제거 (첫 번째 값만 남김)

df_clean = df_dirty.drop_duplicates()    # 코드를 입력하세요

print(f"중복 제거 후: {len(df_clean)}행") 

# Output: 중복 제거 후: 244행

 

 

3) 날짜 정보 추출 및 정렬

# 1. 요일, 월 정보를 추출해서 새로운 컬럼 만들기

df['month'] = df['order_date'].dt.month #중요!!!! dt.month를 df 전체가 아니라 df['order_date']에만 써야 함
df['weekday'] = df['order_date'].dt.day_name() 

df.head()


# 2. 최신 날짜 순으로 정렬해보기 (내림차순)

df_sorted = df.sort_values(by=['order_date'],ascending=[False]) 

df_sorted.head()

 

 처음에 dt.month를 df['order_date']가 아니라 df 전체에 써서 에러가 났다 ㅜㅜ

 

4) 데이터 변환하기

 

 

5) 데이터 합치기 1 : 정보 병합

 

 

6) 데이터 합치기 2 : 데이터 추가

 

 

7) 그룹 집계

 

 

 

  • 아티클 스터디