본문 바로가기
WIL

본 캠프 1 주차 WIL

by Data 학습자 2024. 6. 30.

Week In Learning (WIL)

Facts

이번 주에는 다양한 파이썬 문제를 풀며 여러 가지 프로그래밍 개념과 방법을 학습했습니다:

  1. 문자열 길이와 숫자 확인 (1일차): https://datalearn.tistory.com/21
    •    문자열 s의 길이가 4 또는 6인지 확인하고, 모든 문자가 숫자인지 확인하는 문제를 해결
    •    주요 함수: len(), isdigit().
    •    최종 코드: 
    •    def solution(s): if len(s) == 4 or len(s) == 6: return s.isdigit() return False
  2. 행렬의 덧셈 (2일차): https://datalearn.tistory.com/23
    •    행과 열의 크기가 같은 두 행렬의 같은 위치 값을 더하는 문제를 해결했습니다.
    •    주요 개념: 2차원 리스트, 중첩 for 루프.
    • 최종 코드:
      def solution(arr1, arr2): answer = [] for i in range(len(arr1)): row = [] for j in range(len(arr1[0])): row.append(arr1[i][j] + arr2[i][j]) answer.append(row) return answer
  3. 직사각형 출력하기 (3일차): https://datalearn.tistory.com/26
    •    주어진 가로 길이 a와 세로 길이 b의 직사각형을 출력하는 문제를 해결했습니다.
    •    주요 개념: map(), input(), for 루프.
    • 최종 코드:
      a, b = map(int, input().strip().split()) for x in range(b): print('*' * a)
  4. 최대공약수(GCD)와 최소공배수(LCM) 계산 (4일차): https://datalearn.tistory.com/28
    •    유클리드 호제법을 사용하여 두 수의 최대공약수를 계산하고, 이를 바탕으로 최소공배수를 계산했습니다.
    •    주요 개념: while 루프.
    • 최종 코드:
      def solution(n, m): a, b = n, m while b: a, b = b, a % b gcd = a lcm = (n * m) // gcd return [gcd, lcm]
  5. 진법 변환 (5일차): https://datalearn.tistory.com/29
    •    10진수를 3진수로 변환하고, 이를 다시 뒤집어 10진수로 변환하는 문제를 해결했습니다.
    •    주요 개념: int(), while 루프.
    • 최종 코드:
      def solution(num): b = 3 answer = '' while num: answer += str(num % b) num = num // b return int(answer, 3)
  6. 문자열 변환 (6일차): https://datalearn.tistory.com/33
    •    문자열을 공백으로 나누고, 각 단어의 짝수 인덱스 문자는 대문자로, 홀수 인덱스 문자는 소문자로 변환하는 문제를 해결했습니다.
    •    주요 개념: enumerate(), join().
    • 최종 코드:
      def solution(s): words = s.split(" ") answer = [] for word in words: t_word = "" for i, char in enumerate(word): if i % 2 == 0: t_word += char.upper() else: t_word += char.lower() answer.append(t_word) return " ".join(answer)
  7. 삼총사 문제 해결 (7일차): https://datalearn.tistory.com/36
    •    주어진 리스트에서 3개의 숫자를 선택하여 그 합이 0이 되는 모든 조합을 찾는 문제를 해결했습니다.
    •    주요 개념: 삼중 for 루프.
    • 최종 코드:
      def solution(number): answer = 0 n = len(number) for i in range(n - 2): for j in range(i + 1, n - 1): for k in range(j + 1, n): if number[i] + number[j] + number[k] == 0: answer += 1 return answer

Feelings

  • 문자열 길이와 숫자 확인: 처음에는 isdigit() 함수를 사용하는 것이 낯설었지만, 문제를 해결하면서 자신감을 얻었습니다.

  • 행렬의 덧셈: 중첩 for 루프를 사용하여 2차원 리스트를 다루는 방법을 이해하는 데 어려움이 있었지만, 결국에는 성공적으로 해결할 수 있었습니다.

  • 직사각형 출력하기: map() 함수의 사용법을 익히는 데 도움이 되었고, 간단한 문제를 통해 자신감을 얻었습니다.

  • 최대공약수와 최소공배수: while 루프를 사용하여 간결한 코드를 작성하는 방법을 배웠고 그에 따른 성취감을 느끼게 되었다.

  • 진법 변환: 진법 변환 알고리즘을 이해를 한 뒤 적용해서 문제를 풀어내는 것에 큰 성취감을 느꼈습니다.

  • 문자열 변환: enumerate()와 join()을 사용하여 문자열을 변환하는 문제를 해결하면서 문자열 처리에 대한 이해를 높였습니다.

  • 삼총사 문제 해결: 삼중 for 루프를 사용하여 모든 가능한 조합을 찾는 과정에서 다소 좌절감을 느끼기도 했지만, 최종적으로 문제를 해결했을 때 큰 만족감을 얻었습니다.

Findings

  • 효율성: while 루프를 사용하여 더 간결하고 효율적인 코드를 작성할 수 있음을 배웠습니다.

  • 진법 변환: int() 함수를 사용하여 문자열로 표현된 숫자를 다른 진법으로 쉽게 변환할 수 있음을 알게 되었습니다.

  • 문자열 처리: enumerate와 join을 사용하여 문자열을 효율적으로 변환할 수 있음을 깨달았습니다.

  • 조합 문제 해결: 삼중 for 루프를 사용하여 모든 가능한 조합을 생성하고, 각 조합의 합을 검사하는 방법이 효과적임을 확인했습니다. 다양한 방법을 시도해보면서 각 방법의 장단점을 이해하게 되었습니다.

Future

  • 다양한 접근 방식 시도: 앞으로 문제를 해결할 때 더 효율적인 방법을 찾기 위해 다양한 접근 방식을 시도해 볼 것입니다.

  • 다소 오래 걸리더라도 직접 문제 풀이 도전: 이번 주에 배운 내용을 바탕으로 또 다른 문제를 직접 해결하는 데 도전할 것입니다.

  • 학습 내용 복습: 주간 학습 내용을 정리하면서 복습하고, 이를 통해 얻은 교훈을 다른 문제 해결에도 적용해 볼 것입니다. 특히, 주기적으로 학습 내용을 되돌아보며 부족하다 느껴지는 부분을 보완할 계획입니다.

'WIL' 카테고리의 다른 글

본 캠프 6주차 WIL  (0) 2024.08.05
본 캠프 5주차 WIL  (0) 2024.07.29
본 캠프 3주차 WIL  (0) 2024.07.14
본 캠프 2 주차 WIL  (0) 2024.07.08