TIL | 알고리즘 기초#3 & Git

vel.Ash·2022년 4월 14일
0
post-thumbnail

재귀 함수(Recursive Function) -2

자릿수 합 재귀함수로 구하기

# n의 각 자릿수의 합을 리턴
def sum_digits(n):
    if n < 10:
        return n
    return n % 10 + sum_digits(n // 10)

# 테스트
print(sum_digits(22541))
print(sum_digits(92130))
print(sum_digits(12634))
print(sum_digits(704))
print(sum_digits(3755))
14
15
16
11
20

리스트 뒤집기

# 파라미터 some_list를 거꾸로 뒤집는 함수
def flip(some_list):
    if len(some_list) == 1:
        return some_list 
    return some_list[-1:] + flip(some_list[:-1])

# 테스트
some_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
some_list = flip(some_list)
print(some_list)
[9, 8, 7, 6, 5, 4, 3, 2, 1]

Brute Force

가능한 모든 방법을 다 시행하는 것

장점

-직관적이고 명확하다
-답을 확실하게 찾을 수 있다

단점

-인풋 엄청 큰 경우에는 효율성이 떨어진다

예제 1

왼쪽 뭉치에서 카드를 하나 뽑고 오른쪽 뭉치에서 카드를 하나 뽑아서, 두 수의 곱 중에서 가장 큰 값을 구하기
-일단 가능한 모든 조합을 보기 위한 중첩 반복문 구하기→ 리스트로 저장 → 가장 큰 값을 전후로 비교할지 고민하다가 리스트 재배열 후 가장 큰 값 보여주기

def max_product(left_cards, right_cards):
    # 모든 곱셈의 값을 담기위한 list 생성
    multi_list = []
    # 가능한 모든 조합을 보기 위한 중첩 반복문
    for i in left_cards:
        for j in right_cards:
            multi_list.append(i * j)
    multi_list.sort()
    return multi_list[-1]
    
# 테스트
print(max_product([1, 6, 5], [4, 2, 3]))
print(max_product([1, -9, 3, 4], [2, 8, 3, 1]))
print(max_product([-1, -7, 3], [-4, 3, 6]))
24
32
28

Git

기능

-버전 관리
-협업 가능
-외부 컴퓨터로 파일 전송가능(백업가능)

Github

-Git으로 관리하는 프로젝트를 올려둘 수 있는 사이트

기본개념

Commit 커밋
-프로젝트 디렉토리의 특정 모습을 하나의 버전으로 남기는 행위&결과물
Repository 레포지토리
-커밋이 저장되는 곳

repository 만들기

$ mkdir MathTool     # mkdir 폴더명. 디렉토리 생성하기 
$ ls                 # 리스트 확인하기
$ cd MathTool/       # 폴더 안으로 들어가기 
$ git init           # 비어있는 레포지토리 생산하기 

Commit 주의사항

1.처음으로 커밋을 하기 전 사용자의 이름과 이메일 주소 설정
2.커밋할 파일을 git add로 지정해주기
3.커밋 메세지 남기기(옵션 -m)
<예시>

# 파일 들어가기 
$ cd ..

# 파일 생성확인(Lisence, calculator.py 파일 생성 후) 
$ ls -al

#사용자 이름 및 이메일 주소 설정
$ git config user.name "ash"
$ git config user.email "**@gmail.com"

# 커밋할 파일을 git add로 지정해줘야 함
$ git add calculator.py
$ git add License

# 커밋 메세지 포함하여 커밋 실행 
$ git commit -m "Creat calculator.py and License"

깃 용어 정리

  • git init : 현재 디렉토리를 Git이 관리하는 프로젝트 디렉토리(=working directory)로 설정하고 그 안에 레포지토리(.git 디렉토리) 생성
  • git config user.name 'codeit' : 현재 사용자의 아이디를 'codeit'으로 설정(커밋할 때 필요한 정보)
  • git config user.email 'teacher@codeit.kr' : 현재 사용자의 이메일 주소를 'teacher@codeit.kr'로 설정(커밋할 때 필요한 정보)
  • git add [파일 이름] : 수정사항이 있는 특정 파일을 staging area에 올리기
  • git add [디렉토리명] : 해당 디렉토리 내에서 수정사항이 있는 모든 파일들을 staging area에 올리기
  • git add . : working directory 내의 수정사항이 있는 모든 파일들을 staging area에 올리기
  • git reset [파일 이름] : staging area에 올렸던 파일 다시 내리기
  • git status : Git이 현재 인식하고 있는 프로젝트 관련 내용들 출력(문제 상황이 발생했을 때 현재 상태를 파악하기 위해 활용하면 좋음)
  • git commit -m "커밋 메시지" : 현재 staging area에 있는 것들 커밋으로 남기기
  • git help [커맨드 이름] : 사용법이 궁금한 Git 커맨드의 공식 메뉴얼 내용 출력
profile
코린이의 개발공부

1개의 댓글

comment-user-thumbnail
2022년 4월 14일

정처기 실기 공부 시작!!!!

답글 달기