❤️‍🔥 WIL : Weekly I Learned

 

금주를 다시 살펴보며 저의 상태를 확인해 볼까요~?


2024년 12월 23일 월요일 🧐

 

오늘부터 머신러닝 지도 학습 & 비지도 학습 과제가 발제된 날이었어요

음,, 그렇습니다

아직 머신러닝에 대해서 제대로 숙지가 되지 않은 상태라서, 걱정이 앞서요 ㅠㅠ 뿌엥

 

그래도 해야겠죠.

 

부트 캠프에 들어온 이후부터 느낀 저의 공부 스타일이,

직접 해봄으로써 실패한 데이터를 계속 쌓아가는 게 저랑 잘 맞다고 생각했어요

 

왜냐구요!?!?

 

프로그래머스 문제를 푸는 속도가!! 빨라졌다는 게 느껴질 정도거든요!!

문제를 분석하고 무슨 함수를 써야할지까지 걸리는 시간이 많~이 짧아졌어요

 

머신러닝 지도 학습 과제도 마찬가지이지 않을까요 ㅎㅎ

주변분들한테 도움 많이 받으면서 해보려구요 

 


2024년 12월 24일 화요일 🤗

 

머신러닝 과제를 하다가 벽을 느껴가지고 프로그래머스 문제를 풀었어요

오늘은 배수랑 약수를 명확히 푸는 방법을 기억한 날이었어요

if i % n ==0: # 배수

for i in range(1, n+1, 1):
    if n % i ==0: # 약수

 

프로그래머스 문제 패턴이 뭔가 비슷한 거 같아요

문제를 풀수록 느낌적인 느낌이 오더라구요

그만큼 제가 시행착오를 많이 겪었다는 생각이 드니까 행복했어요 ㅎㅎㅎㅎ

 

하루종일 기분 좋고 뿌듯했던 하루였습니다 🤗


2024년 12월 26일 목요일 😎

 

.join() 함수를 한 번 써보고 싶었는데, 오늘 "[프로그래머스] 인덱스 바꾸기" 문제를 풀면서 써봤어요!

되게 간단하고 쉽고 편하고 좋더라구요 😎 

팀원분들의 코드 카타 풀이 속에서 보인 join()를 '나도 써먹어 봐야징 😎' 했던 게 오늘이었어요ㅎㅎ

 

그리고,, 머신러닝 데이터 분석을 하면서 CRIM, NOX, AGE 칼럼만으로 문제를 해결하려 했는데

시간이 가면 갈수록 잘못된 시작이었다는 게 느껴지더라구요 흠,,, ㅠㅠㅠ

 

모델 성능 평가를 어떻게 내려야 하는지 결괏값을 봐도 모르겠어서 ㅋㅋㅋㅋㅋㅋ

동기 교육생한테 물어보면서 해석을 어떻게 하는지 이해했어요

MSE와 R^2 Score가 가지는 의미가 무엇인지 설명을 들으니까 알겠더라구요

 

이제 GPT의 도움이 필요해 보여요,,

인터넷으로 하나하나 검색을 해봤는데, 키워드를 모르니까 원하는 검색 결과가 안 나오더라구요

그래서 GPT와 함께 해보는 과정을 거칠 겁니다

 

파이팅!! 

 


2024년 12월 27일 금요일 🤪

 

오늘은 제 나름대로 가설을 세웠던 머신러닝 지도 학습의 결과를 맺은 날이었어요

네! 1트는 성능 평가를 내릴 의미가 없는 데이터였어요!

 

그래도,

지도 학습 과정을 해내가면서 스스로 느낀점이 많았던 거 같아요

일단 해봐야죠

처음부터 잘 알고 있고 잘하는 거면, 제가 왜 굳이 배우려 했겠어요 🤪

 

어쨌든 결과를 냈기 때문에 뿌듯한 과정이었고 경험이었어요 ㅎㅎ

 

이번주는 머리에 스팀 많이 올라왔지만, 공부를 하고 있다는 느낌을 받아서 행복했어요 힣 ❣️


 

인사말

안녕하세요!

이번 연도가 끝을 달려가고 있어요

올해는 여러분에게 어떤 해였나요? 😎

저는 올해 초반에는 버거운 일들이 많아서 힘겨웠지만

10월부터는 행복한 나날들을 보낸 거 같아요!

끝 기억이 좋으면 한 해가 만족스러워지는 거 같아요 🤭 

 

오늘도 파이팅입니다!

 

오늘의 일정
오전(09:00 ~ 13:00) 09:00~10:00 코드 카타 3문제 및 팀 오전 회의
10:00~12:00 베이직반 수업
오후(14:00 ~ 18:00) 14:00~15:00 프로그래머스 4문제 풀이
15:00~16:00 순회 및 TIL 정리
16:00~18:00 머신러닝 과제 수행
저녁(19:00 ~ 21:00) 19:00~21:00 머신러닝 과제 수행

요약

  1. 코드 카타 3문제
    1. 옷가게 할인받기
    2. 제곱수 판별하기
    3. 숨어있는 숫자의 덧셈(1)
  2. 베이직반 수업
    1. Python OOP
    2. 데이터 타입을 분류하는 이유
  3. 프로그래머스 4문제 풀이
    1. 배열 회전시키기 https://bmk0703.tistory.com/85
    2. 369게임 https://bmk0703.tistory.com/86
    3. 숫자 찾기 https://bmk0703.tistory.com/87
    4. 문자열 정렬하기(2)
  4. 머신러닝 과제_지도학습 끝 https://bmk0703.tistory.com/77

오전(09:00 ~ 13:00)

1.1. 옷가게 할인 받기

import math

def solution(price):
    if price >= 500000:
        answer = price - price * 0.2
        
    elif price >= 300000:
        answer = price - price * 0.1
        
    elif price >= 100000:
        answer = price - price * 0.05 
    
    else:
        answer = price
        
    return int(math.trunc(answer))  #.trunc()는 소수점 버림

🤔 문제 풀이방법

  • if price >= 500000: answer = price - price * 0.2
    • 50만 원 구매 시 총가격에 20퍼센트 할인된 가격을 적어주었어요
  • elif price >= 300000: answer = price - price * 0.1
    • 30만 원 구매 시 총가격에 10퍼센트 할인된 가격의 코드예요
  • elif price >= 100000: answer = price - price * 0.05
    • 10만 원 구매 시 총 가격에 5퍼센트 할인 된 가격의 코드예요
  • else: answer = price
    • 10만 원 이하 구매 시, 원금 그대로 지불해야 하구요
  • return int(math.trunc(answer))
    • 나눈 값을 int화 시킨 후, 소수점을 버려주는 .trunc() 함수를 써서 return 했어요!

 

다른 팀원 풀이 

def solution(price):
    if price >= 500000:
        price *= 0.80
    elif price >= 300000:
        price *= 0.90
    elif price >= 100000:
        price *= 0.95
    return int(price)

🤔 문제 풀이방법

  • 조건문을 통해 할인율 적용해 주기
  • 50만 원 이상 사면 20%, 30만 원 이상 사면 10%, 10만 원 이상 사면 5% 할인한 금액을 price로 저장
  • 제한사항에 소수점 이하를 버린 정수를 반환한다고 했으므로, price를 정수형으로 변환해 반환

할인가의 반대 퍼센터를 값에 곱해주면 할인된 금액이 바로 나오는 걸 알게 되었어요!

 

 

1.2. 제곱수 판별하기

def solution(n):
    answer = 0
    
    if (n**0.5) % 1 ==0:
        answer = 1
    else:
        answer = 2
        
    return answer

🤔 문제 풀이방법

  • if (n**0.5) % 1 ==0: answer = 1
    • n에 루트를 씌운 값에 1로 나누었을 때 나머지가 0이라면 제곱수니까 1을 반환해요
  • else: answer = 2
    • 나머지가 0이 아니라면 제곱수가 아니니, 2를 반환해 주면 문제 해결!

 

다른 팀원 풀이 

def solution(n):
    if n % (n ** (1/2)) == 0 :
        return 1
    else :
        return 2

🤔 문제 풀이방법

  • n값을 루트 n값으로 나눈 값의 나머지가 0이라면 1을 반환, 아니라면 2를 반환

n에 루트 n을 바로 나뉘어도 되는 걸!!

하나 더 배워갑니당ㅎㅎ

 

 

1.3. 숨어있는 숫자의 덧셈(1)

def solution(my_string):
    answer = 0
    number = ['0','1','2','3','4','5','6','7','8','9']
    for i in range(len(my_string)):
        if my_string[i] in number:
            answer +=int(my_string[i])
            
    return answer

🤔 문제 풀이방법

  • number = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
    • 숫자가 들어있는 리스트를 형성해 줄게요
  • for i in range(len(my_string)): if my_string[i] in number:
    • 만약 my_string 길이만큼의 범위에 number 속, 숫자가 있다면
  • answer +=int(my_string[i])
    • answer에 +1을 하도록 해주면 문제 해결!

 

다른 팀원 풀이 

def solution(my_string):
		numbers = [int(i) for i in my_string if i.isdigit()]
		return sum(numbers)

🤔 문제 풀이방법

  • my_string을 순회하여 요소가 숫자라면 numbers리스트에 int(i)의 값을 저장
  • numbers 리스트를 다 더해주면 결괏값이 나옴

.isdigit() 함수 처음 봤어요

함수 설명 예시
.isdigit() 숫자가 하나라도 있으면 FALSE 반환
숫자가 없으면 TRUE 반환
소숫점과 마이너스는 인식하지 못함
str.isdigit()
문자열이 '숫자'로만 이루어져있는지 확인

 

문자열 안에 숫자가 있는지 없는지 True / False로 판단하는 함수인 거 같아요

 

(10:00 ~ 12:00)

2. 베이직반 수업

2.1. Python OOP

  • 종류
    • 객체지향 프로그래밍 
    • 절차지향 프로그래밍
    • 함수지향 프로그래밍
      • 프로그래밍 : 현실세계 문제를 컴퓨터가 풀게 하기 위해서 "코드"로 컴퓨터에 입력하는 행위
  • Class
    • 특징
      • 속성 및 함수로 구성돼 있음
    • 장점
      • 여러 번 쓸 거 같은 객체일 시, 생성함
      • class 내부가 어떻게 생겼는지 알지 못해도 바로 적용 가능함
    • 단점
      • class 하나를 만들 때, 시간이 많이 듦
      • 상대적으로 실행 속도가 느림 (함수지향, 절차지향 프로그래밍에 비해)
# 상수(불변값) : 상수일 때 모두 대문자로 표기
# 예) class는 붕어빵 틀, instance는 붕어빵

# class 선언 
class Person:	# 여러번 쓸 거 같아서 만드는 객체임
	def __init__(self, name, age):	# class 내부가 어떻게 생겼는지 알지 못해도 바로 적용 가능함
    	self.name = name	# 속성
        self.age = age	# 속성
        
    def greeting(self):
    	print("하이요")


jieun = Person("아이유")	# class의 instance
jimin = Person("지민")	# class의 instance

jieun.greeting()	# 하이요
jimin.greeting()	# 하이요

 

2.2. 데이터 타입을 분류하는 이유

  • 종류
    • 문자열형, 실수형, 정수형, 컨테이너형
  • 이유
    • 메모리와 관련이 깊음
    • 각 데이터 타입에 따라 메모리를 필요로 하는 값이 다름
      • 그래서 같은 타입이 아니라면 오류가 발생하는 것임 

오후(14:00 ~ 18:00)

3. 프로그래머스 4문제 풀이

3.1. 배열 회전시키기

def solution(numbers, direction):
    if direction == "right":
        numbers.insert(0, numbers[-1])  # 원하는 위치 앞에, 추가할 값을 삽입
        numbers.pop()  # pop 함수는 ()에 아무 값도 넣지 않으면 마지막 인덱스를 삭제
        return numbers
        
    else:
        numbers.append(numbers[0])  # 맨 마지막 위치로 첫 번째 숫자가 추가됨
        numbers.pop(0)  # 첫 번째 값을 삭제
        return numbers

 

3.2. 369게임

def solution(order):
    answer = 0
    clapping = ["3", "6", "9"]
    
    for i in str(order):
        if i in clapping:
            answer += 1
            
    return answer

🤔 문제 풀이방법

  • clapping = ["3", "6", "9"]
    • 손뼉 쳐야 하는 해당 값을 리스트로 먼저 만들어주었어요
  • for i in str(order):
    • order은 Int형이기 때문에 문자열화 해주었고, 그 값을 하나하나 i에 넣어줄게요
  • if i in clapping:
    • 만약 i가 리스트 안에 있는 문자라면
  • answer += 1
    • answer에 +1을 해준 값을 더해주고 return 해주면, 문제 해결!

 

3.3. 숫자 찾기

def solution(num, k):
    answer = -1  # 시작을 -1로 설정
    str_num = str(num)
    
    for i in str_num:
        if i == str(k):
            answer = str_num.index(i)+1
        
    return answer

🤔 문제 풀이방법

  • answer = -1  # 시작을 -1로 설정
    • 고정 값으로 answer은 -1로 해둘게요!
  • str_num = str(num)
    • for문을 돌려줄 거기 때문에 num을 문자열화 해줄게요
  • for i in str_num:
    • for문을 돌립니다!
  • if i == str(k):
    • 만약 str_num(==i)이 문자열화 된 k와 같다면
  • answer = str_num.index(i)+1
    • i가 str_num의 index가 뭔지를 출력해 줄게요
    • +1을 해준 이유는, index의 기본값이 0부터 시작이기 때문에 +1을 해주었어요
  • return answer
    • answer을 리턴해주면, 문제 해결!

 

3.4. 문자열 정렬하기(2)

def solution(my_string):
    answer = ''
    
    alphabet_lower = my_string.lower()  # 대문자를 소문자로 바꾸기
    arr_alphabet_lower = sorted(alphabet_lower) # 소문자로 바꾼 문자를 정렬하기
    answer = "".join(arr_alphabet_lower)    # 리스트화 됐으니, join으로 한 번에 모아서 쓰기
    
    return answer

🤔 문제 풀이방법

  • alphabet_lower = my_string.lower()
    • my_string에 있는 대문자들을 소문자화 해줄게요
  • arr_alphabet_lower = sorted(alphabet_lower)
    • 소문자화를 끝냈으면 그 값들을 정렬해 줄게요
  • answer = "".join(arr_alphabet_lower)
    • 정렬을 하면, 리스트로 뽑아내기 때문에, "".join()을 써서 나란히 적어주면, 문제 해결!

 

(17:00~21:00)

4. 머신러닝 과제_지도학습 끝


마무리

머신러닝 지도학습 과정을 수행할 때, 좀 더 체계적으로 빠짐없이 해야겠어요

일단 첫 번째 시도는 틀렸구요! 오늘 밤새서라도 꼼꼼하게 새로 시작해 보려고요

머신러닝 지도학습을 어느 정도 숙지하면, 비지도 학습은 쉽게 수행할 수 있을 거라 생각해요

 

파이팅!!!

 

생각이 더 많아지기 전에, 일단 해봐야겠어요

감사합니다 :)

def solution(num, k):
    answer = -1  # 시작을 -1로 설정
    str_num = str(num)
    
    for i in str_num:
        if i == str(k):
            answer = str_num.index(i)+1
        
    return answer

🤔 문제 풀이방법

  • answer = -1  # 시작을 -1로 설정
    • 고정 값으로 answer은 -1로 해둘게요!
  • str_num = str(num)
    • for문을 돌려줄 거기 때문에 num을 문자열화 해줄게요
  • for i in str_num:
    • for문을 돌립니다!
  • if i == str(k):
    • 만약 str_num(==i)이 문자열화 된 k와 같다면
  • answer = str_num.index(i)+1
    • i가 str_num의 index가 뭔지를 출력해줄게요
    • +1을 해준 이유는, index의 기본값이 0부터 시작이기 때문에 +1을 해주었어요
  • return answer
    • answer을 리턴해주면, 문제 해결!

실패 흔적들 

<1트>

분명 코드를 맞게끔 코드를 썼다고 생각했는데 카운트를 0부터 시작이 아니라 1부터 시작을 하더라구요 🤔 

 

 

바보같이, 문제에 똑똑히 힌트를 줬는데 못 알아챘어요 ㅋㅋㅋㅋㅋㅋ

 

<2트>

도대체 뭐가 문제인지 인지하지 못했어요

그래서 print(i)해서 디버깅을 해보았어요

 

그랬더니,

if i ==str(k):

이 조건일 때만 작동되도록 설정돼 있더라구요

그래서 결괏값이 -1만 나온 거였어요

그래서 저 조건을 삭제했어요

 

<3트>

그러고, str_num이 어떻게 출력이 되는지 print(i)을 다시 해보았는데

하나하나 쭉쭉 밑으로 나오더라구요. 역시 for문,,

 

밑으로 하나씩 출력이 되는 거니까, '그냥 저기서 str(k)값의 .index()을 찾으면 되겠구나!!' 를 깨닫고

 

<5트>

def solution(num, k):
    answer = -1  # 시작을 -1로 설정
    str_num = str(num)
    
    for i in str_num:
        if i == str(k):
            answer = str_num.index(i)
        
    return answer

근데도 오답이 나오길래 결괏값을 봤더니

index()의 기본 카운팅 숫자가 0이었던 걸 간과했어요 ㅋㅋㅋㅋ,,,

 

<6트>

def solution(num, k):
    answer = -1  # 시작을 -1로 설정
    str_num = str(num)
    
    for i in str_num:
        if i == str(k):
            answer = str_num.index(i)+1
        
    return answer

그리하여 최종적으로 코드를 완성한 후, 문제를 해결했답니다! 😋 

 

6트만에 성공했네요 🤪

문제 풀었으니 그걸로 된 거죠 뭐~~~

def solution(order):
    answer = 0
    clapping = ["3", "6", "9"]
    
    for i in str(order):
        if i in clapping:
            answer += 1
            
    return answer

🤔 문제 풀이방법

  • clapping = ["3", "6", "9"]
    • 박수쳐야하는 해당 값을 리스트로 먼저 만들어주었어요
  • for i in str(order):
    • order은 Int형이기 때문에 문자열화 해주었고, 그 값을 하나하나 i에 넣어줄게요
  • if i in clapping:
    • 만약 i가 리스트 안에 있는 문자라면
  • answer += 1
    • answer에 +1을 해준 값을 더해주고 return 해주면, 문제 해결!

if와 in을 쓰는 방법을 자꾸 잊어먹어서 박제하려구요!

 

clapping = ["3", "6", "9"]
if i in clapping:

만약 찾고자 하는 값이 in clapping에 있으면!!

def solution(numbers, direction):
    if direction == "right":
        numbers.insert(0, numbers[-1])  # 원하는 위치 앞에, 추가할 값을 삽입
        numbers.pop()  # pop 함수는 ()에 아무 값도 넣지 않으면 마지막 인덱스를 삭제
        return numbers
        
    else:
        numbers.append(numbers[0])  # 맨 마지막 위치로 첫 번째 숫자가 추가됨
        numbers.pop(0)  # 첫 번째 값이 삭제
        return numbers

🤔 문제 풀이

  • if direction == "right":
    • direction이 "right"일 때,
  • numbers.insert(0, numbers[-1])  # 원하는 위치 앞에, 추가할 값을 삽입
    • insert() 함수는 원하는 위치 앞에 number[-1]의 값을 삽입해주는 함수예요
    • 그래서, right 방향으로 갈 거니까, numbers에 끝자리에 있는 값을 첫 번째로 넣어줄게요
  • numbers.pop()  # pop 함수는 ()에 아무 값도 넣지 않으면 마지막 인덱스를 삭제
    • 그리고, pop() 함수를 써서 원래 numbers의 맨 뒤에 있었던 값을 삭제해줄게요
  • return numbers
    • 그러고 리턴해주면 right 조건은 완성이에요!
  • else:
    • direction이 "left"일 때
  • numbers.append(numbers[0])  # 맨 마지막 위치로 첫 번째 숫자가 추가됨
    • 먼저, numbers에 0번째 값을 numbers의 맨 뒷자리에 추가를 해줘요
  • numbers.pop(0)  # 첫 번째 값이 삭제
    • 그러고, numbers의 첫 번째 값을 삭제해주고
  • return numbers
    • 리턴을 해주면 문제 해결입니다!

list와 함께 쓰이는 함수 알아가기 

추가하는 함수들 

함수 설명 예시
.append() 덧붙인다는 뜻
()안에 값을 입력하면 새로운 요소를 맨 끝에 값 그대로 추가
>>> nums = [1, 2, 3]
>>> nums.append(
4)
# [
1, 2, 3, 4]

>>> nums.append([5, 6])
# [
1, 2, 3, 4, [5, 6]]

.extend() iterable한 자료형을 끝에 하나씩 추가
종류 : string, list, tuple, range(), set, dict
🔥 iterable형이 아니면 오류남
>>> nums = [1, 2, 3]
>>> nums.extend([
4, 5])
# [
1, 2, 3, 4, 5]

>>> a = [10]
>>> nums.extend(a)
# [
1, 2, 3, 4, 5, 10]

.insert(위치, 값) 원하는 위치 앞에 추가할 값을 삽입
위치 : 인덱스 숫자를 입력(음수면 배열 끝을 기준으로 함)
값 : 객체로 추가됨. iterable형이더라도 객체로 추가됨.
🔥 위치에 len()도 가능
>>> nums = [1, 2, 3]
>>> nums.insert(
0, [10, 20])
# [[10, 20], 1, 2, 3]

>>> nums.insert(-
1, 100)
>>> print(nums)
# [[
10, 20], 1, 2, 100, 3]

🔥
>>> nums = [1, 2, 3]
>>> nums.insert(len(nums),
100)
# [
1, 2, 3, 100]


 

삭제하는 함수들 

함수 설명 예시
.remove() 리스트 속 삭제할 특정 값을 입력하여 제거
🔥 동일한 값이 여러 개면, 첫 번째로 나오는 값을 삭제
>>> 수능 = ["국어", "수학", "영어"]
>>> 수능.remove("수학")
>>> print(수능)
# ["국어", "영어"]

🔥
>>> num = [0, 0, 1, 2]
>>> num.remove(0)
>>> print(num)
# [0, 1, 2]
.pop() 리스트 속, 삭제할 index 번호를 사용하여 값 삭제
() 안에 어떠한 숫자도 기입하지 않으면, 마지막 숫자 삭제
del과 비슷하지만, pop은 삭제한 값을 반환할 수 있음
>>> a = [1, 2, 1, 3, 4,  5, 1]
>>>removed = a.pop(1)
>>>print(a)
# [1, 1, 3, 4,  5, 1]

>>> print(removed)
# 2

>>> print(a[0])
# 1
del list[index] 리스트 속, 삭제할 index 번호를 사용하여 값 삭제
🔥[:]을 통해 슬라이싱도 가능
>>> 수능 = ["국어", "수학", "영어"]
>>> del 수능[1]
>>> print(수능)
# ["국어", "영어"]

🔥
>>> 수능 = ["국어", "수학", "영어"]
>>> 수능[0:1]
>>> print(수능)
# ["영어"]
.clear() 리스트의 모든 요소를 제거 >>> 수능 = ["국어", "수학", "영어"]
>>> 수능.clear()
>>> print(수능)
# []

 

인사말

크리스마스는 잘 보내고 오셨나요!

저는 하루종일 애니 보고, 밥 먹고, 숙취에 골골댄 하루였어요

갑자기 달달구리한 블루베리 롤 케이크가 먹고 싶네요 😝

 

메리 크리스마스였습니다 여러분~!

오늘도 파이팅입니다!

 

오늘의 일정
오전(09:00 ~ 13:00) 10:00~11:00 코드 카타 3문제
11:00~12:00 프로그래머스 4문제
12:00~13:00 머신러닝 과제_지도학습
오후(14:00 ~ 18:00) 14:00~18:00 머신러닝 과제_지도학습

요약

  1. 코드 카타 3문제
    1. 순서쌍의 개수
    2. 모음 제거
    3. 문자 반복 출력하기
  2. 프로그래머스 4문제
    1. 암호 해독
    2. 최댓값 만들기(2)
    3. 제곱수 판별하기
    4. 인덱스 바꾸기
  3. 머신러닝 과제_지도학습 https://bmk0703.tistory.com/77

오전(09:00 ~ 13:00)

1. 코드 카타 3문제

1.1. 순서쌍의 개수

def solution(n):
    answer = 0

    for i in range(1,n+1):
        if n % i ==0:
            answer +=1
            
    return answer

🤔 문제 풀이방법

  • for i in range(1,n+1):
    • 1부터 n+1 만큼의 범위를 i에 받을게요
  • if n % i ==0:
    • 만약 n을 i로 나누었을 때 나머지가 0이라면 n의 자연수가 될 거예요
  • answer +=1
    • 그 값을 answer에 +=1 씩 해주면 문제 해결!

 

1.2. 모음 제거

def solution(my_string):
    answer = ''
    collection = ("a", "e","i","o","u")
    
    for i in collection:
        my_string = my_string.replace(i,'')
            
    return my_string

🤔 문제 풀이방법

  • collection = ("a", "e","i","o","u")
    • 모음만 가지고 있는 튜플을 만들어줄게요
  • for i in collection:
    • 이제 튜플에 있는 값들을 하나하나 i에 담아줄 겁니다
  • my_string = my_string.replace(i,'')
    • i에 있는 모음이 my_string에 있는 거라면 .replace()을 써서 공백으로 바꿔줄게요
  • return my_string
    • 그렇게 해서 return을 해주면 문제 해결!

 

다른 팀원 풀이 

def solution(my_string):
    answer = my_string
    vowel = ("a", "e", "i", "o", "u")
    
    for i in vowel:
        answer = "".join(answer.split(i))
    return answer

🤔 문제 풀이방법

  • vowel 이라는 튜플 생성
  • 반복문으로 “”.join(spilt())로 문자 제거

어떻게 이런 발상을 하시죠,, 와,, join이랑 split으로 해결할 수 있다는 게 신기했어요

 

1.3. 문자 반복 출력하기

def solution(my_string, n):
    answer = ''
    
    for text in my_string:
        answer += text * n
        
    return answer

🤔 문제 풀이방법

  • for text in my_string:
    • my_string을 text에 순차적으로 순회하며 넣어줄게요
  • answer += text * n
    • text 문장을 n번만큼 출력을 할 거라서 text 곱하기 n을 해주면 문제 해결!

 

2. 프로그래머스 4문제

2.1. 암호 해독

def solution(cipher, code):
    answer = ''
    
    for i in range(len(cipher)):
        if (i+1)%code ==0:
            answer += cipher[i]
            
    return answer

🤔 문제 풀이방법

  • for i in range(len(cipher)):
    • 주어지는 cipher의 길이만큼을 범위로 해서 i에 넣어줄게요
  • if (i+1)%code ==0:
    • 문제가 code의 배수 번째 글자만이라고 했으니까 나누었을 때 0이 되는 값을 찾을게요
    • 이때 i+1을 해주는 이유는, 배수이기 때문에 code를 곱해줘야 하거든요 기본값이 0이기 때문에 +1을 해주었어요
  •  answer += cipher[i]
    • 그렇게 해서 cipher의 i 번째에 있는 단어를 answer에 추가해 주면, 문제 해결!

 

2.2. 최댓값 만들기(2)

def solution(numbers):
    numbers.sort()
    
    return max(numbers[0]*numbers[1], numbers[-1]*numbers[-2])

🤔 문제 풀이방법

  • numbers.sort()
    • numbers 자체를 sort 해서 정렬해 줄게요
  • return max(numbers[0]*numbers[1], numbers[-1]*numbers[-2])
    • numbers 안에는 음수값도 있기 때문에 큰 값 순으로 정렬을 하면 맨 뒤로 가게 돼요
    • 그래서 양수 두 개를 곱한 값과 음수 두 개를 곱한 값의 최댓값(max)을 찾으면 문제 해결!

 

 

와우,, 8점이나 올라가는 문제였네요?? (,,꒪ᐞ꒪,,)

 

2.3. 제곱수 판별하기

def solution(n):
    answer = 0
    
    if (n**0.5) % 1 ==0:
        answer = 1
    else:
        answer = 2
        
    return answer

🤔 문제 풀이방법

  • if (n**0.5) % 1 ==0:
            answer = 1
    • 제곱수인지 아닌지 판별하는 거예요
    • n의 0.5 제곱이 1로 나누었을 때 나머지가 0이라는 것은 n이 제곱수라는 뜻이에요
    • 그래서 answer을 1로 출력하도록 했어요
  • else:
            answer = 2
    • 그 외의 경우는 2가 출력되도록 설정하면 문제 해결!

 

2.4. 인덱스 바꾸기

def solution(my_string, num1, num2):
    my_string = list(my_string)
    my_string[num1],my_string[num2] = my_string[num2],my_string[num1]
    
    answer = "".join(my_string)
    return answer

🤔 문제 풀이방법

  • my_string = list(my_string)
    • my_string를 리스트화해서 하나하나 뜯어줄게요
  • my_string[num1],my_string[num2] = my_string[num2],my_string[num1]
    • num1과 num2를 각각 num2, num1로 바꾸어줄 거라서 조건을 걸어줍니다
  • answer = "".join(my_string)
    • 파이썬은 위에서부터 밑으로 순서대로 읽기 때문에
    • answer은 ""에 my_string을 join해준 값을 리턴하면 문제 해결!

오후(14:00 ~ 18:00)

3. 머신러닝 과제


마무리

갈수록 문제 푸는 속도가 빨라진 게 느껴져서 너무 뿌듯해요!

역시 사람은 하나를 시작할 때 씨앗부터 해서 꽃을 피우기까지의 과정을 거치는 거 같아요

저는 지금 줄기가 돋아나고 봉우리가 생길랑 말랑 중인 거 같아요 🤭

 

꽃이 한 계절을 대표해서 피잖아요

거의 계절이 얼른 찾아왔으면 좋겠어요 히히

 

감사합니다!

오늘도 수고 많으셨어요!

인사말

안녕하세요!

내일이면 크리스마스네요

그러고 곧 연말이 다가오겠죠? 😣

연말이 주는 화려함은 언제 느껴도 좋은 거 같아요

걸어가는 거리마다 트리와 화려한 불빛 덕분에 행복하답니다 🥰

 

오늘 하루도 파이팅이고, 감기 조심하세요!

 

오늘의 일정
오전(09:00 ~ 13:00) 09:00~10:00 코드카타 3문제, 팀 오전 회의
10:00~13:00 프로그래머스 4문제 풀이
오후(14:00 ~ 18:00) 14:00~17;00 머신러닝 과제 - 이상치 처리하기
17:00~18:00 베이직반 수업
저녁(19:00 ~ 21:00) 18:00~20:00 머신러닝 과제 - 이상치 처리하기

요약

  1. 코드 카타 3문제
    1. 삼각형의 완성 조건(1)
    2. 중앙값 구하기
    3. 짝수는 싫어요
  2. 프로그래머스 4문제
    1. 대문자와 소문자 https://bmk0703.tistory.com/79
    2. 가장 큰 수 찾기 https://bmk0703.tistory.com/80
    3. n의 배수 고르기 https://bmk0703.tistory.com/81
    4. 약수 구하기 https://bmk0703.tistory.com/82
  3. 머신러닝 과제 - 이상치 처리하기
  4. 베이직반 수업

오전(09:00 ~ 13:00)

1. 코드 카타 3문제

1.1. 삼각형의 완성 조건(1)

def solution(sides):
    answer = 0
    
    if max(sides) < sum(sides) - max(sides):
        return 1
    else:
        return 2

🤔 문제 풀이방법

  • “가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.”
    • 문제를 보면 아예 답이 나와있어요. 이걸로 if문 완성해볼까요?
  • if max(sides) < sum(sides) - max(sides):
            return 1
    • 가장 긴 변의 길이를 max로 찾아주었고, 남은 sides의 숫자 중 max값을 빼준 값의 합이 max보다 크면 삼각형이 돼요!
    • 삼각형이 될 경우 1을 return해주고
  • else:
            return 2
    • max의 값이 더 크다면 삼각형이 되지 않으니 2를 return 해주면, 문제 해결!

다른 팀원 풀이 

def solution(sides):
    sides.sort()
    if sides[0] + sides[1] > sides[2] :
        return 1
    else :
        return 2
def solution(sides):
    sides.sort()
    return 1 if sides[-1] < sides[0] + sides[1] else 2

🤔 문제 풀이방법

  • sort() 함수를 사용해서 sides 리스트를 오름차순으로 정렬
  • 최대 값(정렬 했으므로 맨 마지막 수가 최댓값이니까 -1)이 나머지 두 수의 합보다 작으면 1 반환, 아니면 2 반환

 

와,, 진짜 깔끔한 코드이지 않나요?

저도 다른 팀원분들 코드를 볼 때마다 "나도 저렇게 깔끔, 간략하게 짜고 싶다"는 생각이 들어요

짱 재밌습니다 😲

 

1.2. 중앙값 구하기

def solution(array):
    sort_array = sorted(array)
    center_num = len(array) // 2
    
    answer = sort_array[center_num]
    return answer

 

🤔 문제 풀이방법

  • sort_array = sorted(array)
    • 중앙값을 찾아야 하니까 미리 정렬해줄게요
  • center_num = len(array) // 2
    • 중앙값은 array의 길이를 2로 나눈 몫의 위치에 있을 거예요
  • answer = sort_array[center_num]
    • 아까 정렬해준 array에 center_num의 값 번째에 있는 애가 중앙값이죠!
  • return answer
    • return 해주면 문제 해결!

 

다른 팀원 풀이 

def solution(array):
    array.sort()
    return array[len(array)//2]

🤔 문제 풀이방법

  • array를 오름차순으로 정렬한 후 array 길이의 반(/2)인 인덱스를 반환

 

깔끔 그 자체인 코드였습니다 🤭

 

1.3. 짝수는 싫어요

def solution(n):
    numbers = []                                
    for num in range(1,n+1, 2):                  
        numbers.append(num)              
    return numbers

🤔 문제 풀이방법

  • numbers = []
    • 숫자들을 담아줄 리스트를 만들어둘게요
  • for num in range(1,n+1, 2):
    numbers.append(num)
    • range가 1부터 n+1까지의 숫자 범위를 2칸씩 증가해서 num에 담아줄게요
    • 이렇게 하며 홀수만 담기게 될 거예요
    • 그 num을 아까 만들어놓은 numbers=[] 리스트에 넣어주면 문제해결!

 

다른 팀원 풀이 

def solution(n):
    return list(range(1, n+1, 2))

🤔 문제 풀이방법

  • range를 사용하여 1부터 n까지 2의 간격으로 리스트 생성하여 반환

 

개쩌는 거 같아요

벽이 느껴진다고 해야 할까나용 ㅋㅋㅋㅋㅋㅋㅋㅋ

나도 다음엔 저렇게 만들어내야지!! 🔥

 

(10:00~13:00)

2. 프로그래머스 4문제

2.1. 대문자와 소문자

def solution(my_string):
    return my_string.swapcase()

https://bmk0703.tistory.com/79

🤔 문제 풀이방법

  • return my_string.swapcase()
    • .swapcase()이 함수가 대문자는 소문자로 / 소문자는 대문자로 짜주는 함수라고 해요
    • 그래서 바로 return에다가 my_string.swapcase()을 적어서 결괏값을 만들어냈어요!

 

2.2. 가장 큰 수 찾기

https://bmk0703.tistory.com/80

def solution(array):
    return max(array), array.index(max(array))

🤔 문제 풀이

  • return
    • 바로 return 해줄 겁니다
  • max(array),
    • array 속에 있는 가장 큰 수를 뽑아 낼 거예요
  • array.index(max(array))
    • max(array)가 array 속에 몇 번째에 있는지 index를 통해서 찾아내주면 문제 해결!

 

2.3. n의 배수 고르기

https://bmk0703.tistory.com/81

def solution(n, numlist):
    answer = []
    
    for i in numlist:
        if i % n ==0:
            answer.append(i)
            
    return answer

🤔 문제 풀이

  • answer = []
    • 정답들이 들어갈 리스트를 만들어줄게요
  • for i in numlist:
    • numlist에 있는 값들을 순차적으로 순회해서 i에 넣어줄게요
  • if i % n ==0:
    • 만약 i를 n으로 나누었을 때 나머지가 떨어진다면
  • answer.append(i)
    • 먼저 만들어놓은 리스트에 append(i)를 해주면 문제 해결!

 

2.4. 약수 구하기

def solution(n):
    answer = []
    
    for i in range(1,n+1,1):
        if n % i ==0:
            answer.append(i)
            
    return answer

https://bmk0703.tistory.com/82

🤔 문제 풀이방법

  • answer = []
    • 정답들을 담을 리스트를 만들어줄게요
  • for i in range(1,n+1,1):
    • 범위를 지정해줄게요
    • 곱하기를 해야 하니까 1부터 시작해서 n+1까지 한 칸씩 범위를 뽑아낼게요
  • if n % i ==0:
    • 만약 n을 i로 나누었을 때 나머지가 0이라면 약수겠죠?
  •  answer.append(i)
    • 그 값을 만들어주었던 리스트에 append(i)를 해줄게요
    • 그럼 문제 해결!

오후(14:00 ~ 18:00)

3. 머신러닝 과제 - 이상치 처리하기

(17:00 ~ 18:00)

4. 베이직반 수업

def solution(n):
    answer = []
    
    for i in range(1,n+1,1):
        if n % i ==0:
            answer.append(i)
            
    return answer

🤔 문제 풀이방법

  • answer = []
    • 정답들을 담을 리스트를 만들어줄게요
  • for i in range(1,n+1,1):
    • 범위를 지정해줄게요
    • 곱하기를 해야 하니까 1부터 시작해서 n+1까지 한 칸씩 범위를 뽑아낼게요
  • if n % i ==0:
    • 만약 n을 i로 나누었을 때 나머지가 0이라면 약수겠죠?
  •  answer.append(i)
    • 그 값을 만들어주었던 리스트에 append(i)를 해줄게요
    • 그럼 문제 해결!

def solution(n, numlist):
    answer = []
    
    for i in numlist:
        if i % n ==0:
            answer.append(i)
            
    return answer

 

🤔 문제 풀이

  • answer = []
    • 정답들이 들어갈 리스트를 만들어줄게요
  • for i in numlist:
    • numlist에 있는 값들을 순차적으로 순회해서 i에 넣어줄게요
  • if i % n ==0:
    • 만약 i를 n으로 나누었을 때 나머지가 떨어진다면
  • answer.append(i)
    • 먼저 만들어놓은 리스트에 append(i)를 해주면 문제 해결!

def solution(array):
    return max(array), array.index(max(array))


🤔 문제 풀이

  • return
    • 바로 return 해줄 겁니다
  • max(array),
    • array 속에 있는 가장 큰 수를 뽑아 낼 거예요
  • array.index(max(array))
    • max(array)가 array 속에 몇 번째에 있는지 index를 통해서 찾아내주면 문제 해결!

실패 흔적들 

#1트
def solution(array):
    arr_sort = sorted(array)
    return max(arr_sort), arr_sort.index(max(arr_sort))

🤔 문제 풀이

  • 여태까지 큰 값을 찾을 때에 sorted 함수를 써서 먼저 정렬을 해줬어요
  • 그러고 최댓값을 찾고, 그 최댓값의 index 번호를 찾으려고 했어요
  • 결괏값에 나오는 index 번호가 +1이 된 상태로 나오더라구요

 

#2트
def solution(array):
    arr_sort = sorted(array)
    return [max(arr_sort), arr_sort.index(max(arr_sort))-1]

🤔 문제 풀이

  • 저는 매우 단순하기 때문에 -1을 해주었어요
  • 근데 두 번째 경우의 수에서는 틀렸다고 뜨길래 문제를 천천히 다시 읽어보았어요

 

#3트
def solution(array):
    return max(array), array.index(max(array))

🤔 문제 풀이

  • 그냥 정렬을 안 했어요
  • 문제 자체를 딱히 정리할 필요가 없다는 생각이 들었어요
  • 그래서 array를 있는 그대로 사용해서 문제를 풀었어요

 

+ Recent posts