인사말

오늘부터 팀이 바뀌었어요!

그리고 CH3_장고에 대해서 공부해야 하는 주차이기도 해요

1월 3일 ~ 1월 23일까지 유지되는 팀이래요!

 

아!

제가 조장이 되었기도 해요!

되게 잘 챙겨주고 싶고, 편하게끔 도와드리고 싶어서 많이 노력할 거예요

 

새로운 시작! 새로운 챕터! 너무 어려웠던 오늘의 프로그래머스 문제!

오늘도 어지러웠고, 재밌었던 하루였어요 🥳

 

금요일이네요!

주말 잘 보내시고 좋은 하루 되셨길 바라요~!

 

오늘의 일정
오전(09:00 ~ 13:00) 09:00~10:00 코드 카타 3문제
10:00~11:50 새로운 팀 새로운 노션 설정 및 회의
12:00~14:00 프로그래머스 4문제
오후(14:00 ~ 18:00) 14:00~15:00 프로그래머스 4문제
15:30~18:00 파이썬 기본 이론 공부
저녁(19:00 ~ 21:00) 19:00~21:00 장고 강의 시청

요약

  1. 코드 카타 3문제
    1. 공배수
    2. 문자열을 정수로 변환하기
    3. 문자열 뒤의 n글자
  2. 프로그래머스 4문제
    1. k의 개수
    2. 컨트롤 제트 https://bmk0703.tistory.com/110
    3. 소인수분해 https://bmk0703.tistory.com/111
    4. 이진수 더하기 https://bmk0703.tistory.com/112
  3. 파이썬 기본 이론 공부
    1. Python(파이썬) 표준 입력 https://bmk0703.tistory.com/113
    2. 모듈의 사용(import) https://bmk0703.tistory.com/114
  4. 장고 강의 시청

오전(09:00 ~ 13:00)

1. 코드 카타 3문제

1.1. 공배수

def solution(number, n, m):
    answer = 0
    
    if number % n == 0:
        if number % m == 0:
            answer = 1
        else:
            answer = 0
            
    return answer

 

🤔 문제 풀이

  • if number % n == 0:
            if number % m == 0:
                answer = 1
    • 중첩 if문을 써서 문제를 해결했어요
    • 스타트 조건은 n의 배수일 때가 True일 때예요
    • if number % m == 0:
      • 그리고 또 if문을 써서 m의 배수일 때,
    • answer = 1
      • answer을 1로 출력되게 했어요
  • else:
                answer = 0
    • 해당되지 않는 조건은 0으로 출력해 주면 문제 해결!

 

다른 풀이 

def solution(number, n, m):
    answer = 0
    
    if number % n == 0 and number % m == 0:
        answer = 1
    else:
        answer = 0
            
    return answer

 

이렇게 and을 써서도 문제를 풀 수 있어요!

 

1.2. 문자열을 정수로 변환하기

def solution(n_str):
    return int(n_str)

 

🤔 문제 풀이

  • 간단한 형변환 문제였어요!
  • return int(n_str)
    • 정수로 바꿀 때는 int로 하면 돼요

 

1.3. 문자열의 뒤의 n글자

def solution(my_string, n):
    return my_string[-n:]

 

🤔 문제 풀이

  • 문자열의 슬라이싱을 사용해서 문제를 해결했어요
  • 슬라이싱은 [처음:끝:간격]으로 돼 있거든요
  • return my_string[-n:]
    • 뒤에서부터 n번째라고 했기 때문에 -n으로 하여, 문제 해결!

 

2.  프로그래머스 4문제

2.1. k의 개수

def solution(i, j, k):
    answer = 0
    
    for i in range(i, j+1):
        answer += str(i).count(str(k))

    return answer

🤔 문제 풀이

  • for i in range(i, j+1):
    • i에서 j+1 한 만큼 숫자를 데리고 올게요
  • answer += str(i).count(str(k))
    • count 함수는 문자열일 때만 count가 가능해요
    • 그래서 i를 문자열화(str) 해주시고, 찾고자 하는 k의 개수를 문자열화(str)하여 count 해주시면 문제 해결!

 

2.2. 컨트롤 제트

def solution(s):
    answer = 0
    s_list = list(s.split())
    
    for i in range(len(s_list)):
        if s_list[i] == "Z":
            answer -= int(s_list[i-1])
        else:
            answer += int(s_list[i])
            
    return answer

https://bmk0703.tistory.com/110

🤔 문제 풀이

s는 숫자, "Z", 공백으로 이루어져 있습니다.
s에 있는 숫자와 "Z"는 서로 공백으로 구분됩니다. 
  • s_list = list(s.split())
    • 위 문장을 힌트로 얻어서, s를 공백에 따라 list로 만들어주었어요
    • for문으로 돌려야 하기 때문에 iterable 형식으로 만들어줘야 하거든요
  • for i in range(len(s_list)):
    • 인덱스 번호의 형태로 데리고 올게요
  • if s_list[i] == "Z":
                answer -= int(s_list[i-1])
    • 만약 s_list[i]가 "Z"일 때,
    • 문제에서 "Z" 앞에 있는 숫자를 뺀다고 했잖아요?
      • 그래서 s_list[i-1] 한 값을 int형으로 바꿔준 후 -= 하여 answer에 넣어줬어요
  • else:
                answer += int(s_list[i])
    • 그 외에는 바로바로 더해주어서 answer에 더하여 추가해 주었어요
    • retrun 해주면, 문제 해결!

 

 

이거 왜 1점밖에 안 줘요?? ㅡㅡ

머리가 얼마나 아팠는데 1점밖에 안 주다니요 ㅡㅡ

 

2.3. 소인수분해

def solution(n):
    answer = []
    num = 2
    
    while num <=n:
        if n % num ==0:
            answer.append(num)
            n = n // num
            
        else:
             num +=1
                
    return sorted(set(answer))

https://bmk0703.tistory.com/111

🤔 문제 풀이

  • 소인수분해니까, n 값이 다 분해될 때까지 반복해야 되잖아요
    • 그래서 while문으로 해보았어요
  • num = 2
    • 오늘 숫자의 공약수에는 1이 들어가 있으니까 2부터 시작했어요!
  • while num <=n:
            if n % num ==0:
                answer.append(num)
                n = n // num
    • num이 n보다 작거나 같을 때까지만 반복하도록 조건을 걸어줬어요
    • 만약 n에 num을 나눴을 때 나머지가 0이라면 소인수라는 의미니까 answer에 append 해줄게요
    • 그리고 n은 n을 num으로 나누었을 때 몫이 되는 값이에요
  • else:
             num +=1
    • 소인수가 아닐 경우 +1을 계속해주면서 while문을 종료해 나갈게요
  • return sorted(set(answer))
    • 그리고 중복값을 없애줄 set() 함수로 answer을 정리해 주고,
      • set() 함수는 순서를 보장해주지 않기 때문에 정렬 함수가 필요해요
    • sorted() 함수로 set(answer)을 정렬해 준 값을 return 해주면 문제 해결!

 

 

하,, 오늘 푸는 프로그래머스 문제들이 하나같이 왜 이렇게 어려워요..?

소인수분해의 특징을 간파하기 전까지는 while문을 떠올리지도 못했어요

1시간이나 걸렸던 문제였어요 ㅠㅠ

 

이론 공부 하기도 전에 힘 다 빠졌네요 🙄

 

2.4. 이진수 더하기

def solution(bin1, bin2):
    answer = ''
    
    answer = int(bin1, 2) + int(bin2, 2)
    
    return bin(answer)[2:]  # bin() <- 이걸 쓰면 앞에 "0b"가 생겨서 슬라이싱 했음

https://bmk0703.tistory.com/112

🤔 문제 풀이

  • 파이썬 자체에서 bin() 함수와 Int() 함수로 문자열화 된 진수들을 더할 수 있어요
  • answer = int(bin1, 2) + int(bin2, 2)
    • int(문자열, n진수)의 형태로 문자열 수만큼 더해주시면 덧셈 코드는 완성 돼요
  •  return bin(answer)[2:]
    • 대신 출력할 때는 bin()을 쓰서야 하는데
      • 이 bin() 함수는 자동으로 앞에 "0b"가 생성되기 때문에 슬라이싱([2:])으로 원하는 값을 반환해 주시면 문제 해결!

 

 

바뀐 팀원분들과 상의해서 풀었어요 히히

오늘 프로그래머스 문제들 점수가 아주 짭짤하네요 😋

 


오후(14:00 ~ 18:00)

3. 파이썬 기본 이론 공부

3.1. Python(파이썬) 표준 입력

3.2. 모듈의 사용(import)


저녁(19:00 ~ 21:00)

4. 장고 강의 듣기

 


마무리

장고,, 들어가봅시다,,

주말 잘 보내시고 내일도 공부하러 올 거예요!

내일은 장고 글로 뵙겠습니다 ㅎㅎ

주말 잘 보내세요~!

+ Recent posts