2025 내일배움캠프 QAQC_2기

2025 내일배움캠프 QAQC_2기 본캠프 21일차

mingdoremi 2025. 6. 11. 22:08

안녕하세요! 오늘은 본캠프 21일차입니다!!

팀 프로젝트 한지 3일차인데 데이터가 말썽이라 튜터님들도 고생하고 계시는 것 같아요.. ㅜㅜ

 

오늘의 코드카타!

<Python>

콜라츠 추측

문제  1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같음.

  • 입력된 수가 짝수라면 2로 나눕니다.
  • 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.
  • 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.

예를 들어, 주어진 수가 6이라면 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 이 되어 총 8번 만에 1이 됩니다. 위 작업을 몇 번이나 반복해야 하는지 반환하는 함수, solution을 완성해 주세요. 단, 주어진 수가 1인 경우에는 0을, 작업을 500번 반복할 때까지 1이 되지 않는다면 –1을 반환

 

제한

입력된 수 num은 1 이상 8,000,000 미만인 정수

def solution(num):
    answer = 0
    while num != 1:
        if answer >= 500:
            return -1
        if num % 2 == 0:
            num = num // 2
        else:
            num = num * 3 + 1
        answer += 1
    return answer
while num != 1: 문제에서 1이 될 때까지 Collatz작업을 반복하라고 했으니까,
1이 아니면 while 계속 순회
if answer >= 500:
    return -1
조건1) 문제에서 500이 넘으면 -1을 반환하라고 함
answer += 1 answer +=1의 들여쓰기 위치가 중요한데,

num이 1이 아닐때마다 블록 안의 코드(정수/짝수 판별 및 계산)을 반복해서 실행함
answer를 거친 후, while로 돌아가서 다시 계산하니까
while 문이 한 번 반복될 때마다 무조건 answer는 한 번씩 실행됨! 
그래서 num이 1이 될 때까지 작업을 몇 번 했는지를 answer가 물어보는 것임

 

★ FOR문이 아니라 WHILE문을 써야하는 이유:

- for문은 "정해진 횟수만큼 반복"할 때 사용

- While문은 "특정 조건이 만족될 때까지 반복"할 때 사용(여기서는 num=1때까지)

* for i in range(500)은 비효율적(break 필요) + 무엇보다 500회 반복 끝나도 num이 1이 안 되면 걍 -1반환 가능=오답

 

★오답노트

while문을 사용해야하는데 for문을 사용하였고 while문을 사용할 생각을 하지 못했음.

answer += 1을 사용해야한다는 생각을 하지 못함.

 

<SQL>

중성화 여부 파악하기

문제 보호소의 동물이 중성화되었는지 아닌지 파악하려 합니다. 중성화된 동물은 SEX_UPON_INTAKE 컬럼에 'Neutered' 또는 'Spayed'라는 단어가 들어있습니다. 동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 중성화가 되어있다면 'O', 아니라면 'X'라고 표시

select animal_id,
       name,
       case
            when sex_upon_intake like '%Neutered%' or sex_upon_intake like '%Spayed%' then "O"
            else "X" end as "중성화"
from animal_ins
order by animal_id

then의 내용이 같다면, sex_upon_intake like '%Neutered%' 랑 like '%Spayed%'는 or로 같이 한 줄에 작성 가능

 

★오답노트

case when문을 사용해야하는데 떠오르지 않았음.

end가 끝나고 "중성화"라는 별명을 붙여야하는데 sex_upon_intake 바로 뒤에 붙였음.

 

방법 2 ) IF

select animal_id,
       name,
       if(sex_upon_intake like like '%Neutered%' or sex_upon_intake like '%Spayed%', 'O', 'X') as '중성화'
from animal_ins
order by animal_id

 

그리고 나머지 시간은 기초 프로젝트하는 데 시간을 다 썼습니다 쿄쿄

데이터 분석하는데 시간이 엄청 빨리가네요..

결국 저희 팀은 10시 넘어서 끝났어요... 

데이터를 너무 깊게 파서 보나 싶기도 하고 데이터 분석을 했을 때 딱 어떤 점이 문제다! 이렇게 확 보이는 데이터가 없어서 어려워요 ... ㅜㅜ

 

오늘도 수고하셨습니다~!