오늘의 일정
오전(09:00 ~ 13:00) 09:00~09:30 코드 카타 3문제
09:00~09:45 Chapter 3 발제
09:50~13:00 프로그래머스 4문제
오후(14:00 ~ 18:00) 14:00~18:00 파이썬 기본 이론 공부
저녁(19:00 ~ 21:00) 19:00~20:30 베이직반 수업
20:30~21:00 TIL 마무리

요약

  1. 코드 카타 3문제
    1. 소문자로 바꾸기
    2. 원소들의 곱과 합
    3. 문자열 곱하기
  2. 프로그래머스 4문제
    1. 가까운 수 https://bmk0703.tistory.com/103
    2. 한 번만 등장한 문자 https://bmk0703.tistory.com/104
    3. 7의 개수 https://bmk0703.tistory.com/105
    4. A로 B 만들기 
  3. 파이썬 기본 이론 공부
    1. 제01장 첫 번째 계단밟기 
      1. 프로그램, 프로그래밍 언어 https://bmk0703.tistory.com/106
      2. 주석, 들여 쓰기, 행결합/행분리 https://bmk0703.tistory.com/107
    2. 제02장 두 번째 계단밟기
      1. Python(파이썬) 표준 입출력, 출력 https://bmk0703.tistory.com/108
  4. 베이직반 수업

오전(09:00 ~ 13:00)

1. 코드 카타 3문제

1.1. 소문자로 바꾸기

def solution(myString):
    return myString.lower()

 

🤔 문제 풀이방법

  • .lower() 함수를 써서 소문자화 해주었어요
  • .upper() 함수를 쓰시면 대문자화 할 수 있어요

 

1.2. 원소들의 곱과 합

def solution(num_list):
    answer = 0
    multiply = 1
    add = 0
    
    for i in range(len(num_list)):
        multiply *= num_list[i]
        add += num_list[i]
        
        if multiply < add**2:
            answer = 1
        else:
            answer = 0
           
    return answer

 

🤔 문제 풀이방법

  • answer = 0
    multiply = 1
    add = 0
    • for문을 각각 더해주고, 곱해줄 거기 때문에 객체를 만들어주었어요
    • multiply는 곱해줄 거기 때문에 1부터 시작할게요
  • for i in range(len(num_list)):
    • 인덱스 값으로 뽑아낼 거기 때문에 num_list의 길이만큼 range를 i로 출력할게요
  • multiply *= num_list[i]
            add += num_list[i]
    • num_list의 i번째 숫자를 각각 곱해주고 더해준 값을 각각의 객체에 넣어줬어요
  • if multiply < add**2:
                answer = 1
            else:
                answer = 0
    • 모든 원소들의 곱이, 모든 원소들의 합의 제곱보다 작으면 1을 출력해요
    • 아닌 경우에는 0을 출력하도록 했어요
    • return 해주면 문제 해결!
def solution(num_list):
    multiply = 1
    add = 0
    
    for i in range(len(num_list)):
        multiply *= num_list[i]
        add += num_list[i]
           
    return 1 if multiply < add**2 else 0

 

문제는 해결했지만, 코드를 줄여보고 싶더라구요

그래서 튜터님의 도움을 받아서 삼항 연산자를 통해 코드 길이를 줄여보았어요!

 

1.3. 문자열 곱하기

def solution(my_string, k):
    return my_string *k

 

🤔 문제 풀이방법

  • 문자열 반복은 곱하기(* 숫자) 해주시면 원하는 숫자만큼 반복 출력돼요

 

2. 프로그래머스 4문제

2.1. 가까운 수

def solution(array, n):
    array.sort()
    sub_array = []
    
    for i in range(len(array)):
        sub_array.append(abs(n - array[i]))
        
    return array[sub_array.index(min(sub_array))]

 

🤔 문제 풀이

  • array.sort()
    • 문제에서 "정렬된" 매개변수가 주어진다 하진 않았으니까 정렬부터 해줄게요
  • sub_array = []
    • n과의 차이를 구한 결괏값을 담는 객체를 만들어줄게요
  • for i in range(len(array)):
    • 이번에도 인덱스 형태로 뽑아낼게요
  • sub_array.append(abs(n - array[i]))
    • abs() 함수는 절댓값을 뽑아내는 함수예요
    • n에 array[i]번째 값을 뺀 절댓값을 sub_array에 넣어줄게요
  • return array[sub_array.index(min(sub_array))]
    • min(sub_array) : 가장 작은 값
    • sub_array.index(min(sub_array)) : sub_array에서 min(sub_array)인 값의 인덱스 번호를 찾는 거예요
    • array[sub_array.index(min(sub_array))] 이제 그 결괏값의 인덱스 번호를 array에서 데리고 올게요
    • 뭔 말인지 모르겠죠? 저도 그랬어요
array = [3, 10, 28]
sub_array = [17, 10, 8]

min(sub_array) == 8

sub_array.index(min(sub_array)) == sub_array.index(8) == 2

array[sub_array.index(min(sub_array))] 
                      == array[sub_array.index(8)] == array[2] == 28
  • 이렇게 되는 거예요!

진짜,, 1시간 30분이나 걸리며 풀었던 문제예요 ㅠㅠㅠㅠㅠㅠㅠ

너무 어렵더라구요,,

초반에 접근 방식은 좋았는데, 그 뒤로 코드를 완성시키지 못해서 고민이 많이 된 문제였어요

 

 

2.2. 한 번만 등장한 문자

def solution(s):
    answer = ''
    
    for i in s:
        if s.count(i) ==1:
            answer +=i
        
    return ''.join(sorted(answer))

🤔 문제 풀이

  • for i in s:
            if s.count(i) ==1:
                answer +=i
    • for문을 통해서 s의 문자열에서 한 번만 등장한 문자의 수를 셀 거예요
    • 만약 s에서 i의 문자가 1과 같다면 answer에 i 값을 추가해 줄게요
  • return ''.join(sorted(answer))
    • 그리고 추가된 i들을 정렬해 준 뒤, join 함수를 써서 ''에 넣어주고 retrun 해주면 문제 해결!

 

오늘은 .count() 함수를 쓰는 문제가 많이 나온 거 같아요!

.count() 함수를 연속해서 쓰다 보니까 감이 잡히네요!

 

2.3. 7의 개수

def solution(array):
    array = str(array)
    return array.count('7')

 

🤔 문제 풀이

  • array = str(array)
    • array를 문자열화 해줄게요
  • return array.count('7')
    • 문자열화 한 array에서 '7'이 몇 개가 있는지 .count() 함수를 써서 개수를 확인하면 문제 해결!

 

이번에도 .count() 함수를 써서 문제를 해결할 수 있었어요 🤭

 

2.4. A로 B 만들기

def solution(before, after):
    answer = 0
    
    if sorted(before) == sorted(after):
        answer = 1
    else:
        answer = 0
        
    return answer

 

🤔 문제 풀이

  • 문제를 보자마자 'before와 after 속의 문자들이 같으면 되겠구나' 싶었어요
  • if sorted(before) == sorted(after):
            answer = 1
    • 그래서 if문으로 각각 sorted 한 값이 같다면 1을 출력해 주고
  • else:
            answer = 0
    • 그게 아니라면 0을 출력하도록 해서, return 해주면 문제 해결!

 

 

엥..? 5점이나 주네요?

 

오늘도 이렇게 문제를 풀어보았어요!

갈수록 입문 테스트 문제가 아닌 것만 같은 느낌이 들어요,, 🤔

오랜만에 1시간 이상 걸리면서 고민하고 문제 푼 기분이네요!

굉장히 머리가 간지럽고 뿌듯했던 문제 풀이었어요 ㅎㅎ

 

함수를 찾는 과정에서도, 인터넷에 어떻게 검색을 해야 알 수 있을지도 감 잡았어요!

재밌었습니다 😋


오후(14:00 ~ 18:00)

3. 파이썬 기본 이론 공부

3.1. 제01장 첫 번째 계단밟기

3.1.1. [Python] 프로그램과 프로그래밍 언어

3.1.2. [Python] 주석, 들여 쓰기, 행결합/행분리

 

01 주석

주석을 이렇게나 쉽게 달 수 있다니,, 신세계였어요

 

 

03 행결합/행분리

이게 더 신기해요 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

세미콜론도 쓰는 경우가 있군요!!

11번째, 12번째 코드가 진짜 신기해요!!

 

03 행분리

호오,, 🤔 

역시 공부를 할 땐, 기본서부터 읽어둬야 할 거 같아요

몰랐던 개념이 아주 그냥 물 흐르듯이 나오네요 🥲

 

 

3.2. 제02장 두 번째 계단밟기

3.2.1. [Python] Python 표준 입출력, 표준 출력


저녁(19:00 ~ 21:00)

4. 베이직반 수업


마무리

하,, 머리야

파이썬을 제대로 잘 잡아놔야 더 상위 개념을 배울 때, 흔들리지 않고 진도가 나아갈 거라 생각했거든요

그래서 이번주 주말까지 파이썬 기본 이론들 꽉 잡을 생각이에요

 

갈수록 할 게 많아지는데, 기초가 아직 튼튼하지 않아서 걱정이네요 🥲

더 많은 생각이 들기 전에, 정리하도록 하겠습니다

 

오늘도 수고 많으셨어요, 안녕히 주무세요

감사합니다

🔗 출처

📘 Python 계단밟기

제02장 두 번째 계단밟기

01. Python(파이썬) 표준 입출력

왜! 모든 프로그램은 배울 때, 처음에 출력문을 배우는 걸까?

▶ 컴퓨터로 작업을 지시하고 컴퓨터가 처리한 결과를 확인하기 위해서

▶ 출력을 어디로 할 것인가에 따라 프로그램이 변경된다.

▶ 출력 대상에 따라 다양한 출력이 생성된다.

출력하는 위치 출력 프로그램 명
콘솔(Console) 콘솔 어플리케이션(Console Application)
웹 브라우저(Web Browser) 웹 어플리케이션(Web Application)
스마트 기기 App(앱)
윈도우(Window) 윈도우 어플리케이션(Window Application)

 


1. Python(파이썬) 표준 출력

 

1.1. print 함수

 

사용법

  • print(출력 대상 1, 출력 대상 2....)
  • 출력 시, 출력 대상들의 사이에 구분자를 넣을 때는 sep를 기술한다. (기본값 : 공백)
  • 마지막 문자열을 출력하고 출력할 문자는 end를 기술한다. (기본값 : 줄 바꿈 문자)
  • 출력 방향을 변경할 때는 file을 기술한다. (기본값 : sys.stdout(표준 출력 장치, 모니터))
  • 스트림을 강제적으로 flush 할지를 지정할 때는 flush를 기술한다. (기본값 : False)
실행 값 입력
#  출력에 대하여 알아보자
print("하나","둘","셋",1,2,3) 

print("하나","둘","셋",1,2,3,sep='-') 

print("첫번째 값")
print("두번째 값") # 다른 줄에 출력

print("첫번째 값", end=" ---> ")
print("두번째 값") # 같은 줄에 출력
실행 결과
하나 둘 셋 1 2 3

하나-둘-셋-1-2-3

첫번째 값
두번째 값

첫번째 값 ---> 두번째 값

 

 

파일로 출력
# 출력 방향 변경
file = open("test.txt","w")
print("Hello Python!!", file=file) # 파일로 출력
file.close()
실행 결과
"text.txt" 파일로 생성되어 "Hello Python!!"이란 문자열이 저장되었음을 알 수 있다.

 


1.2. 문자열 출력

  • ('), (") 둘 중 하나를 사용하여 문자열 출력 가능하다.
  • 작은따옴표 안에 큰따옴표가 가능하다. (그 반대도 가능)
  • 큰따옴표 안에서 큰따옴표를 출력하려면 \"로 해야 한다.
  • 작은따옴표 안에서 작은따옴표를 출력하려면 \'로 해야 한다.
  • 동일한 문자열을 여러 번 출력 시, " * 횟수"를 사용한다.
실행 값 입력
print('Hello World!!')
print("Hello World!!")

print("나의 이름은 '한사람'입니다.")
print('나의 이름은 "한사람"입니다.')

print("나의 이름은 \"한사람\"입니다.")
print('나의 이름은 \'한사람\'입니다.')

print('-' * 40)
실행 결과
Hello World!!
Hello World!!

나의 이름은 '한사람'입니다.
나의 이름은 "한사람"입니다.

나의 이름은 "한사람"입니다.
나의 이름은 '한사람'입니다.

----------------------------------------

 


1.3. 확장 문자 출력

 

Python은 기본 확장 문자(escape sequence)를 지원한다.

▷ C언어를 쓸 때 자주 쓰는 거예요. 파이썬에선 안 써도 돼요

\' : 따옴표 문자
\" : 큰따옴표 문자
\ : backslash 문자
\a : bell 문자
\b : backslash 문자
\f : Formfeed 문자
\n : newline 문 \r : carriage return 문자(\n와 동일하지 않다.)
\t : tab 문자
\v : vertical tab 문자
  • ASCII 문자를 포함할 수 있는 확장 문자
    • 숫자 형식 (8진법과 16진법) 확장 문자(escape sequence)
    • Unicode 확장 문자(escape sequence)
    • 8진수 확장 문자(escape sequence)
    • 16진수 확장 문자(escape sequence)
  • 8진수 확장 문자(escape sequence)
    • backslash()와 세 자릿수 8진수 숫자를 사용한다.
  • 결과로는 8진수 확장 문자(escape sequence)에 해당하는 ASCII 문자가 출력된다.
  • 16진수 확장 문자(escape sequence)도 이와 비슷하지만 “\”가 아니라 “\x”로 시작되며, 16진수 숫자로 구성되는 점이 다르다.
  • 이 확장 문자(escape sequence)는 문자가 더 이상 16진수가 아닐 때 종료된다
    • 예를 들어
      • 문자 n은 ASCII 문자표에서 십진수 값 109이다. 이는 8진수로 하면 156이며 16진수로 하면 6E이다.

 

실행 값 입력
#  출력에 대하여 알아보자
print('Hello \tWorld!!')
print("Hello \nWorld!!")

print("나의 이름은 \"한사람\"입니다.")
print('나의 이름은 \'한사람\'입니다.')

print('-' * 40)

print('1 \n')
print('2 \012')
print('3 \x0A')

print('-' * 40)

print('n')
print('\156')
print('\x6E')

print('-' * 40)
실행 결과
Hello   World!!
Hello 
World!!

나의 이름은 "한사람"입니다.
나의 이름은 '한사람'입니다.

----------------------------------------

1 

2 

3 

----------------------------------------

n
n
n

----------------------------------------

 

  • Python 3 내의 모든 문자열은 Unicode 문자열(string)이다.
    • 모든 language에서 사용 가능한 대부분의 문자를 포함할 수 있다.

 


1.4. 형식에 맞추어 출력

 

데이터 형식에 맞추어 출력할 수 있다.

이것은 print 함수의 설명이라기보다는 문자열의 형식을 지정하는 방법이다.

형식화된 문자열로 만든 다음, 문자열을 출력하는 것이다.

 

  • 이전 방식 : "출력 형식"%(데이터....)
1. 출력 형식에 형식화된 문자열을 넣어 출력의 모양을 변경하는 것이다.
2. "% 형식문자"로 지정하면 % 뒤의 출력 대상들이 1:1로 대응되어 출력된다.
3. %s : 문자열, %d : 정수, %f : 실수 등이 있다.

예 1) %03d : "정수를 3칸에 맞추어 출력하는데 앞의 빈칸은 0으로 채워라"이다.
예 2) %6.2f : "실수를 전체 6칸 소수 이하 2칸에 맞추어 출력하라"이다.

 

  • 파이썬 3(Python 3) 포맷팅 방식 : "출력 형식".format(데이터....)
1. 출력 형식에 형식화된 문자열을 넣어 출력의 모양을 변경하는 것이다.
2. "{}" 지정하면 format에 기술한 출력 대상들이 대응되어 출력된다.
3. "{n}"안에 숫자를 지정하여 출력 대상의 위치를 지정할 수 있다.
4. 함수의 인자처럼 키워드를 사용해서 나타낼 수 있다.
5. 동일한 데이터를 여러 번 출력할 수 있다.

 

실행 값 입력
# 형식에 맞추어 출력하기

# 이전 방식
print('나의 이름은 %s입니다'%('한사람'))
print('나의 이름은 "%s"입니다. 나이는 %d세이고 성별은 %s입니다.'%('한사람',33,'남성'))
print('나이는 %d세이고 성별은 %s입니다. 나의 이름은 "%s"입니다. '%(33,'남성','한사람'))
print('나이는 %03d세이고 신장은 %6.2f입니다. 나의 이름은 "%s"입니다. '%(33,56.789,'한사람'))
print('-' * 40)

# 파이썬(Python) 3 포맷팅 방식
print('나의 이름은 {}입니다'.format('한사람'))
print('나의 이름은 "{0}"입니다. 나이는 {1}세이고 성별은 {2}입니다.'.format('한사람',33,'남성'))
print('나이는 {1}세이고 성별은 {2}입니다. 나의 이름은 "{0}"입니다. '.format('한사람',33,'남성'))
print('나이는 {age}세이고 성별은 {gender}입니다. 나의 이름은 "{name}"입니다. '
         .format(name='한사람',age=33,gender='남성'))
         
print('만세삼창 :  {0}!!! {0}!!! {0}!!! '.format('만세'))
print('삼삼칠 박수 :  {0}!!! {0}!!! {1}!!! '.format('짝'*3,'짝'*7))
print('-' * 40)
실행 결과
나의 이름은 한사람입니다
나의 이름은 "한사람"입니다. 나이는 33세이고 성별은 남성입니다.
나이는 33세이고 성별은 남성입니다. 나의 이름은 "한사람"입니다. 
나이는 033세이고 신장은  56.79입니다. 나의 이름은 "한사람"입니다. 
----------------------------------------
나의 이름은 한사람입니다
나의 이름은 "한사람"입니다. 나이는 33세이고 성별은 남성입니다.
나이는 33세이고 성별은 남성입니다. 나의 이름은 "한사람"입니다. 
나이는 33세이고 성별은 남성입니다. 나의 이름은 "한사람"입니다.

만세삼창 :  만세!!! 만세!!! 만세!!! 
삼삼칠 박수 :  짝짝짝!!! 짝짝짝!!! 짝짝짝짝짝짝짝!!! 
----------------------------------------

 


1.5. 문자열 앞 0으로 채우기 zfill()

 

지정한 길이만큼 공간을 확보하고 남는 앞부분을 "0"으로 채워준다.

길이가 문자열보다 적을 경우에는 모든 문자열을 출력한다.

 

실행 값 입력
# 형식에 맞추어 출력하기
#  앞의 빈칸 0으로 채우기
print('12'.zfill(5))
print('-12'.zfill(5))
print('3.141'.zfill(7))
print('-3.141'.zfill(7))
print('3.14159265359'.zfill(5))
print('-3.14159265359'.zfill(5))
print('문자열'.zfill(10))
print('문자열'.zfill(1))
print('-' * 40)
실행 결과
00012
-0012
003.141
-03.141
3.14159265359
-3.14159265359
0000000문자열
문자열
----------------------------------------

 

 

 

 

🔗 출처

📘 Python 계단밟기

제01장 첫 번째 계단밟기

06. Python(파이썬) 기본

  1. 주석
  2. 들여 쓰기(indent)
  3. 행결합/행분리

 

01. 주석

1. 주석이란?

프로그램의 실행에는 전혀 관여하지 않으면서 프로그램 코드 중간중간에 코드에 대한 자세한 설명을 첨부하는 것

 

 

2. 주석의 필요성

사용자가 만든 프로그램을 다른 사람에게 해석시키려면 적은 코드에도 적지 않은 시간과 노력이 소요된다.
실무에서는 혼자 프로그래밍하는 게 아닌 여러 사람이 팀으로 작업하기 때문에,
코드 해석 및 공유 시 주석을 달아놓아 코드 해석에 쓰이는 시간과 노력을 줄이기 위해서 쓴다.

 

 

3. 주석의 종류

  • 블록 단위 : 작은따옴표(')를 연달아 세 개를 사용한다.
사용법 : ''' 주석처리 적용문장 '''
사용예
''' 주석처리 적용 문장 1
주석처리 적용 문장 2
주석처리 적용 문장 3
주석처리 적용 문장 4
'''

 

  • 행 단위 : #을 사용한다.
사용법 : # 주석처리 적용 문장
사용예
# 주석처리 적용 문장 1
# 주석처리 적용 문장 2
# 주석처리 적용 문장 3

 

 

4. 주석의 사용 예

  • Document String
    • 큰 따옴표(") 3개 를 연속으로 사용하여 주석으로 사용하는 것
    • 모듈, 함수, 클래스, 메서드 등을 만들 때, 자체 설명서를 등록하는 역할을 한다.
  • Block comment
    • 작은 따옴표(') 3개 를 연속으로 사용하여 주석으로 사용하는 것
    • 일반적인 주석을 쓸 때 사용한다.
'''
프로그램명 : comment1.py
작 성 자 : 한 사 람
작 성 일 : 2018년 8월 1일
설  명 : 파이선에서 주석을 어떻게 처리하는지 보여주는 예제
'''

#  random 모듈을 사용할 수 있도록 포함한다.
import random

#-----------------------------------------------------------------
# 함수 정의 시작
def lotto():
    """
    로또 번호를 생성해 줍니다.
    ------------------------------
    호출 방법 : lotto()
    1~45사이의 정수 6개를 리스트로 리턴합니다.
    :return : <class 'list'>
    """
    # 1~45사이의 정수 중에서 6개를 무작위로 추출합니다.
    lotto =  random.sample(range(1,46),6)
    lotto.sort() #  오름차순으로 정렬합니다.
    return lotto # 결과를  호출항 곳으로 돌려줍니다.
# 함수 정의 끝

#-----------------------------------------------------------------
# 함수 호출하여 결과를 바로 출력합니다.
print(lotto())

# 도큐멘트 스트링 사용방법
print(lotto.__doc__)   # 도큐멘트 스트링 출력
help(lotto) # 도움말 함수 사용

 

실행 결과
[13, 16, 29, 33, 35, 45]

    로또 번호를 생성해 줍니다.
    ------------------------------
    호출 방법 : lotto()
    1~45사이의 정수 6개를 리스트로 리턴합니다.
    :return : <class 'list'>

Help on function lotto in module __main__:

lotto()
    로또 번호를 생성해 줍니다.
    ------------------------------
    호출 방법 : lotto()
    1~45사이의 정수 6개를 리스트로 리턴합니다.
    :return : <class 'list'>

 


02. 들여 쓰기(Indent)

1. 들여 쓰기(indent)

  • 가독성을 위해 들여 쓰기를 한다.
  • 다른 프로그램 언어에서는 {}을 사용하여 영역을 지정한다.
    • 하지만 파이썬에서는 들여쓰기를 사용하여 영역을 지정한다. (== 문법적인 강제 사항이다)
  • 코드 블록을 구성하기 위해 if, for, class, def 등등을 작성하면서 나오는 콜론(:) 다음 아랫 줄은 반드시 들여 쓰기를 해야 한다.
    • 들여쓰기 방법 : 한 칸, 두 칸, 네 칸, 탭 등
** 중요한 것은 같은 블록 내에서는 들여쓰기 칸 수가 동일해야 한다.
위반 시에는 "IndentationError: unexpected indent"라는 에러를 출력한다.**

 

C언어 들여쓰기
 int factorial(int x) {
     if(x == 0)     {
         return 1;
     }     else     {
         return x * factorial(x - 1);
     }
 }
int factorial(int x){
    return (x==0) ? 1 :  x * factorial(x - 1);
}

 

Python 들여쓰기
def factorial(x):
     if x == 0:
         return 1
     else:
         return x * factorial(x - 1)
def factorial(x):
    return 1 if x==0 else x * factorial(x - 1)

 


03. 행결합/행분리

 

행결합 : 세미콜론(;)

  • 많은 언어들이 구문이 끝날 때 문장의 뒤에 구문의 종료를 알리는 세미콜론(;)을 적는다.
  • 하지만 파이썬은 구문이 끝나고 다음 줄로 내려갈 때 세미콜론이 필요 없다.
    • 줄이 바뀌면 자동으로 구분이 종료되었음을 인식한다.
** 세미콜론을 붙여도 에러는 나지 않는다. 여러 구문을 이어 쓸 때는 세미콜론을 쓰기도 한다**

 

# 세미콜론(semicolon) 사용법
print("Hello Python!!")	# Hello Python!!
print("Hello Python!!");	# Hello Python!!

print("첫번째 줄!!"); print("두번째 줄")
# 첫번째 줄!!
# 두번째 줄

print("첫번째 줄!!"); print("두번째 줄");
# 첫번째 줄!!
# 두번째 줄

 

 

행분리 : (역슬레쉬), 괄호

** 한 줄의 내용이 길어서 여러 줄로 타이핑해야 하는 경우에는, (역슬레쉬)나 괄호를 이용한다.**
# 긴 내용을 한줄인것 처럼 인식 시키기(\ 사용)
a = 1 + 2 + 3 + \
      4 + 5 + 6
      
# 긴 내용을 한줄인것 처럼 인식 시키기(괄호 사용)
b = (1 + 2 + 3 +
        4 + 5 + 6)
        
#  파라메터를 넘기는 것이라면 콤마(comma) 뒤에서 그냥 엔터를 쓰면 된다.
print("Hello",  "Python",
          end="\n", sep="\t")
# 결괏값
# Hello   Python

# 문자열 중간에 줄바꿈을 하면 자동으로 ""가 열고 닫히며 1줄로 인식한다.
print("아주 아주 아주 긴 문자열이라고 가정하자 " 
         "한줄에 모두 타이핑이 힘들다면")
         
# 결괏값
# 아주 아주 아주 긴 문자열이라고 가정하자 한줄에 모두 타이핑이 힘들다면

 

🔗 출처

 

📘 Python 계단밟기

제01장 첫 번째 계단밟기

05. Python이란?

1. 프로그램이란?

어떤 문제를 해결하기 위해 컴퓨터에게 주어지는 처리 방법과 순서를 기술한 일련의 명령문의 집합체.

 

 

컴퓨터란?

많은 양의 데이터를 정확하고 빠르게 자동으로 처리할 수 있는 기계

 

컴퓨터의 특징

  • 신속성 : 입력된 데이터를 보다 빠른 시간 내에 처리하여 원하는 결과를 얻을 수 있다.
  • 대량성 : 한꺼번에 많은 양의 자료를 기억하거나 처리할 수 있다.
  • 정확성 : (신뢰성) 자료처리 과정에서 발생가능한 오차를 최소화하여 정확한 결과를 얻을 수 있다.
  • 호환성 : 다른 컴퓨터나 매체에서 작성한 자료도 공유하여 처리할 수 있다.
  • 자동성 : 입력된 자료를 프로그램이라고 하는 정해진 처리 순서에 따라 자동으로 처리한다.
  • 범용성 : 여러 가지 분야에 다양하게 사용된다.
  • 수동성 : 컴퓨터는 데이터를 주어진 프로그램에 따라 처리할 뿐 스스로 작업을 수행할 수 없다.

 

컴퓨터 프로그램이란?

컴퓨터가 알아들을 수 있는 명령어를 이용하여 컴퓨터에게 작업을 지시하는 작업지시서

 


2. 프로그래밍 언어란?

주어진 어떤 문제를 해결하기 위해 인간과 컴퓨터 사이에서 의사소통을 가능하게 하는 인공적인 언어
>> 
이 언어를 통하여 사용자는 컴퓨터에게 일련의 일을 시키는 명령어의 집합체인 프로그램을 작성할 수 있다.

 

 

프로그래밍 언어의 특징

  • 간결성 : 사람이 프로그램을 쉽게 이해하고 읽을 수 있도록 간결하게 표현할 수 있다.
  • 직교성 : 언어의 각 구성요소가 상호 독립적이고 어떤 환경에서도 그 구성요소가 같은 의미로 사용된다.
  • 가독성 : 사람이 이해하기 쉽도록 작성된 문법, 주석 등이 가독성의 향상에 도움이 된다.
  • 정확성 : 잘 정의된 문법은 정확성을 보장한다. 각 언어의 문법은 대부분이 세계 표준이다.
  • 기계 독립성 : 서로 다른 컴퓨터 상에서 항상 같은 결과를 요구한다.

 

프로그래밍 언어의 종류

  • 저급언어 : 컴퓨터 개발 초창기에 사용되던 프로그래밍 언어이다.
    • 기계어와 어셈블리어로 나뉜다.
  • 고급언어: 사용자 중심의 언어로 사람이 쓰는 자연어에 가까운 프로그래밍 언어이다.
    • C/C++, JAVA, Python, Basic 기타...

📝 고급언어로 만들어진 모든 프로그램은 실행되기 전, 컴퓨터가 이해할 수 있는 기계어로 변환되어야 한다.

     이를 위해서 컴파일러, 인터프리터를 이용하여 코드를 변환한다.

  • 컴파일러 : 한 프로그램을 한꺼번에 번역한 뒤 실행한다
    • 예) C/C++, JAVA 등
  • 인터프리터 : 명령어 단위로 한 행씩 번역해 가며 실행한다
    • 예) Python, Basic 등

 


3. Python 언어란?

1991년 프로그래머인 귀도 반 로섬(Guido van Rossum)이 발표한 고급 프로그래밍 언어이다.
플랫폼이 독립적이며 인터프리터식, 객체지향적, 동적 타이핑(dynamically typed) 대화형 언어이다.
비영리의 파이썬 소프트웨어 재단이 관리하는 개방형, 고동체 기반 개발 모델을 가지고 있다.
C언어로 구현된 C파이썬 구현이 사실상이 표준이다.

 

 

주요 특징

  • 실행 시간에 자료형을 검사하는 동적 타이핑(dynamic typing)을 지원한다.
  • 객체의 멤버에 무제한으로 접근할 수 있다.
  • 모듈, 클래스, 객체 등과 같은 언어의 요소가 내부에서 접근할 수 있다.
  • 리플렉션을 이용한 기술을 쓸 수 있다.

 

해석 프로그램의 종류

  • C파이썬 : C로 작성된 인터프리터
  • 스택리스 파이썬 : C 스택을 사용하지 않는 인터프리터
  • 자이썬 (제이파이썬 : JPython) : 자바 가상 머신용 인터프리터
  • IronPython : .NET 플랫폼용 인터프리터
  • PyPy : 파이썬으로 작성된 파이썬 인터프리터

 

def solution(array):
    array = str(array)
    return array.count('7')

 

🤔 문제 풀이

  • array = str(array)
    • array를 문자열화 해줄게요
  • return array.count('7')
    • 문자열화 한 array에서 '7'이 몇 개가 있는지 .count() 함수를 써서 개수를 확인하면 문제 해결!

실패 흔적들 

1트

#1트
def solution(array):

    return array.count(7)

 

🤔 코드 풀이

  • 그냥 array 속에서 7을 찾으면 되겠구나 했어요
  • 띠용? 1개만 카운트 되더라구요 이렇게 하면 안 되겠구나 싶었어요

 

2트

#2트
def solution(array):
    array = str(array)
    return array.count(7)

 

🤔 코드 풀이

  • int형으로는 안 된다고 하길래 '대체 뭐가 인트라는 거야 🤔' 랬는데 ㅎ,,
  • return array.count(7)
    • 범인 검거했죠? '7'이 아니라서 오류났어요

 

3트

#3트
def solution(array):
    array = str(array)
    return array.count('7')

 

🤔 코드 풀이

  • 문제 해결!

def solution(s):
    answer = ''
    
    for i in s:
        if s.count(i) ==1:
            answer +=i
        
    return ''.join(sorted(answer))

 

🤔 문제 풀이

  • for i in s:
            if s.count(i) ==1:
                answer +=i
    • for문을 통해서 s의 문자열에서 한 번만 등장한 문자의 수를 셀 거예요
    • 만약 s에서 i의 문자가 1과 같다면 answer에 i 값을 추가해줄게요
  • return ''.join(sorted(answer))
    • 그리고 추가된 i들을 정렬해준 뒤, join 함수를 써서 ''에 넣어주고 retrun 해주면 문제 해결!

실패 흔적들 

1트

#1트
def solution(s):
    answer = ''
    s = set(s)
    
    for i in s:
        answer = ''.join(dict.fromkeys(s))
        
    return sorted(answer)

 

🤔 코드 풀이

  • 매개변수 s가 문자열이길래 set() 함수를 써서 하나하나 다 뜯어냈어요
  • 그러고 for문으로 s를 돌려서 중복값을 join 함수로 없애려 했어요
  • 그리고 answer을 정렬한 값을 리턴하려 했지만,
    • 문자열로 출력이 되지 않았고, l도 중복이었는데 삭제되지 않았어요 🤔 

 

2트

#2트
def solution(s):
    answer = ''
    
    for i in s:
        if s.count(i) ==1:
            answer +=i
        
    return ''.join(sorted(answer))

 

🤔 코드 풀이

  • 힌트를 얻고자 튜터님께 방문해서 설명을 들었어요
    • set() 함수 자체가 중복을 허용하지 않고, 순서도 보장할 수 없는 특징이더라구요
    • 그래서 싹 다 지우고 다시 처음부터 했어요
  • 문제를 다시 계속 읽어보았는데, "한 번만"이라는 단어에 꽂혔거든요 그래서 "count를 해볼까"를 생각해서 코드 짜보았어요
    • 이 접근 방식이 맞았어요! 정답이었답니당~~
  •     return ''.join(sorted(answer))
    • 원하는 결괏값 형태로 만들려면 ''.join 함수를 써야 하구요.
    • 사전 순으로 정렬해서 출력해야 하기 때문에 answer를 sorted한 값을 ''에 join 해주었어요
    • 문제 해결!

def solution(array, n):
    array.sort()
    sub_array = []
    
    for i in range(len(array)):
        sub_array.append(abs(n - array[i]))
        
    return array[sub_array.index(min(sub_array))]

 

🤔 문제 풀이

  • array.sort()
    • 문제에서 "정렬된" 매개변수가 주어진다 하진 않았으니까 정렬부터 해줄게요
  • sub_array = []
    • n과의 차이를 구한 결괏값을 담는 객체를 만들어줄게요
  • for i in range(len(array)):
    • 이번에도 인덱스 형태로 뽑아낼게요
  • sub_array.append(abs(n - array[i]))
    • abs() 함수는 절대값을 뽑아내는 함수예요
    • n에 array[i]번째 값을 뺀 절대값을 sub_array에 넣어줄게요
  • return array[sub_array.index(min(sub_array))]
    • min(sub_array) : 가장 작은 값
    • sub_array.index(min(sub_array)) : sub_array에서 min(sub_array)인 값의 인덱스 번호를 찾는 거예요
    • array[sub_array.index(min(sub_array))] 이제 그 결괏값의 인덱스 번호를 array에서 데리고 올게요
    • 뭔 말인지 모르겠죠? 저도 그랬어요
array = [3, 10, 28]
sub_array = [17, 10, 8]

min(sub_array) == 8

sub_array.index(min(sub_array)) == sub_array.index(8) == 2

array[sub_array.index(min(sub_array))] 
                      == array[sub_array.index(8)] == array[2] == 28
  • 이렇게 되는 거예요!

실패 흔적들 

1트

#1트
def solution(array, n):
    answer = 0
    sub_array = []
    
    for i in range(len(array)):
        sub_array += abs(n - array[i])
        
        answer = max(array)
        
    return answer

 

🤔 코드 풀이

  • for i in range(len(array)):
            sub_array += abs(n - array[i])
    • 이렇게 뺀 값을 새로운 객체에 넣을 생각이었는데, 생각해보니까 이건 연산자잖아요? 🙄

 

2트

#2트
def solution(array, n):
    answer = 0
    sub_array = []
    
    for i in range(len(array)):
        sub_array.append(abs(n - array[i]))
        
        answer = min(sub_array)
        
    return answer

 

🤔 코드 풀이

  • 그래서 += 에서 .append()로 변경해주었어요
  • 그리고, 생각해보니까 가장 가까운 값을 찾는 거잖아요
    • 그래서 max가 아니라 min으로 변경해주었어요

  • 코드 실행을 해보니까 딱 +n 만큼의 차이가 나더라구요

 

3트

#3트
def solution(array, n):
    answer = 0
    sub_array = []
    
    for i in range(len(array)):
        sub_array.append(abs(n - array[i]))
        
        answer = min(sub_array) +n
        
    return answer

 

🤔 코드 풀이

  • 정확성이 떨어지는 거네요
  • 생각해보니까 제일 작은 값에서 n 만큼 더한 식이었더라구요 ㅋㅋㅋㅋㅋㅋㅋ

 

4트

# 4트
def solution(array, n):
    answer = 0
    sub_array = []
    
    for i in range(len(array)):
        sub_array.append(abs(n - array[i]))
        
        answer = array[sub_array.index(min(sub_array))]
        
    return answer

 

🤔 코드 풀이

  • answer = array[sub_array.index(min(sub_array))]
    • sub_array에서 가장 작은 값의 인덱스를 array에서 뽑아내요
  • 하지만 제출 후 채점하기에서 틀렸쮸?

 

5트

#5트
def solution(array, n):
    sub_array = []
    
    for i in range(len(array)):
        sub_array.append(abs(n - array[i])) # abs(n - array[i])의 결괏값을 그대로 객체에 추가
        
    return array[sub_array.index(min(sub_array))]

 

🤔 코드 풀이

  • 조건이 하나 더 필요해 보여요
  • 근데 어떤 경우에서 오류가 난 건지 모르겠더라구요
  • 튜터님께 달려갔어요

 

6트

#6트
def solution(array, n):
    array.sort()
    sub_array = []
    
    for i in range(len(array)):
        sub_array.append(abs(n - array[i])) # abs(n - array[i])의 결괏값을 그대로 객체에 추가
        
    return array[sub_array.index(min(sub_array))]

 

🤔 코드 풀이

  • 설마,, 정렬이 안 된 경우가 있어서 그런가? 하고
    • array.sort() 이 문장을 추가해주니까

  • 정답으로 뜨네요,,
  • 13점 오르는 건 처음 본 거 같아요 와우.,

인사말

오늘이 벌써 2024년 마지막 날이래요 😱

시간 정말 빨라요,,

그래도 연말에 좋은 기억이 더 많았기 때문에 너무 행복해요 😎

내년의 저의 앞길이 기대가 되고 궁금하네요!

열심히 가꾼 만큼 꽃을 피웠으면 좋겠어요 🥺

 

오늘도 파이팅입니다!

 

오늘의 일정
오전(09:00 ~ 13:00) 09:00~10:00 코드 카타 3문제, 팀 오전 회의
10:00~13:00 프로그래머스 4문제
오후(14:00 ~ 18:00) 14:00~16:00 밍글데이
16:00~17:00 마크다운
17:00~18:00 Github 협업 하기
저녁(19:30 ~ 21:00) 19:00~20:00 베이직반
20:00~21:00 TIL 작성하기

요약

  1. 코드 카타 3문제
    1. 이어 붙인 수
    2. flag에 따라 다른 값 반환하기
    3. 길이에 따른 연산
  2. 프로그래머스 4문제
    1. 중복된 문자 제거 https://bmk0703.tistory.com/96
    2. 모스부호(1) https://bmk0703.tistory.com/97
    3. 팩토리얼 https://bmk0703.tistory.com/98
    4. 숨어있는 숫자의 덧셈(2) https://bmk0703.tistory.com/99
  3. 밍글데이
  4. 마크다운 https://bmk0703.tistory.com/100
  5. Github 협업하기 https://bmk0703.tistory.com/101
  6. 베이직반

오전(09:00 ~ 13:00)

1. 코드 카타 3문제

1.1. 이어 붙인 수

def solution(num_list):
    answer = 0
    odd = ''
    even = ''
    
    for i in range(len(num_list)):
        if num_list[i] % 2 ==0:
            even += str(num_list[i])
        else:
            odd += str(num_list[i])
        
    return int(odd) + int(even)

 

🤔 문제 풀이방법

  • odd = '', even = ''
    • 홀수와 짝수의 문자열을 만들어 줄게요
  • for i in range(len(num_list)):  
    • num_list의 길이를 범위로 두어 index를 뽑아낼게요
  • if num_list[i] % 2 ==0: 
    • num_list[i]번째 숫자가 2로 나누었을 때 나머지가 0이면 짝수예요
  • even += str(num_list[i]) 
    • 그 값을 문자열화 해서 even에 추가해 줄게요
  • else: odd += str(num_list[i])
    • 그 외에는 홀수일 테니, odd에 문자열로 추가해 줄게요
  • return int(odd) + int(even)
    • odd와 even을 int화 하여 더한 값을 return 해주면, 문제 해결!

 

다른 팀원 풀이 

def solution(num_list):
    odd = ''
    even = ''
    for i in num_list :
        if i % 2 == 0 :
            even += str(i)
        else :
            odd += str(i)
    return int(odd) + int(even)

 

🤔 저처럼 range를 써서 index로 뽑아내지 말고, 그대로를 str형으로 데리고 와서 해도 됐네요!

 

# join 함수
def solution(num_list):
    e = ''.join([str(i) for i in num_list if i % 2 == 0])
    o = ''.join([str(i) for i in num_list if i % 2 != 0])
    return int(e) + int(o)

 

🤔 저도 처음에 다 뜯어내서 join으로 풀고 싶었는데, 전혀 모르겠더라구요

근데 이렇게 푸는 거였네요,, 와우,, 

 

1.2. flag에 따라 다른 값 반환하기

def solution(a, b, flag):
    answer = 0
    
    if flag == True:
        answer = a+b
    else:
        answer = a-b
        
    return answer

 

🤔 문제 풀이방법

  • if문을 써서 간결하게 해결했어요!

 

다른 팀원 풀이 

def solution(a, b, flag):
    return a + b if flag else a - b

 

🤔 삼항 연산자라고 하더라구요

if가 true이면 왼쪽의 값을 반환하구요, false이면 오른쪽 조건을 반환하는 원리라고 해요

 

1.3. 길이에 따른 연산

def solution(num_list):
    answer = 0
    
    if len(num_list) >= 11:
        answer = sum(num_list)
    else:
        answer = 1
        for i in num_list:
            answer *= i
            
    return answer

 

🤔 문제 풀이방법

  • if len(num_list) >= 11:
        answer = sum(num_list)
    • 만약 num_list의 길이가 11 이상이면 answer은 sum을 해줄게요
  • else:
            answer = 1
    • 길이가 11 이상이 아니라면, 곱하기를 해줘야 하니까 answer은 1부터 시작할게요
  • for i in num_list:
                answer *= i 
    • num_list의 숫자를 하나씩 i에 배치하고, answer에 넣을 때는 *=를 써서 넣어줄게요
    • return 하면 문제 해결!

2. 프로그래머스 4문제

2.1. 중복된 문자 제거

https://bmk0703.tistory.com/96

def solution(my_string):
    answer = ''
    
    answer = ''.join(dict.fromkeys(my_string))
    
    return answer

 

🤔 문제 풀이

  • answer = ''.join(dict.fromkeys(my_string))
    • 함수 dict.fromkeys()는 딕셔너리에서 key들을 만들 때 쓰는 함수예요
    • 딕셔너리에서 key는 중복이 불가능하다는 점을 활용해서 문제를 풀었어요
      • 중복된 문자를 제거할 때 자주 쓰이는 함수라고 하더라구요!

 

2.2. 모스부호(1)

https://bmk0703.tistory.com/97

def solution(letter):
    answer = []
    morse = { 
    '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
    '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
    '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
    '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
    '-.--':'y','--..':'z'}
    
    letter = letter.split()
    
    for i in letter:
        answer.append(morse[i])
        
    return ''.join(answer)

 

🤔 문제 풀이

  • letter = letter.split()
    • 문제를 보자마자 "split() 해야겠다".라는 생각을 했어요
    • 왜냐면 "letter의 모스부호는 공백으로 나누어져 있습니다"를 봤거든요
  • for i in letter:
    • 그리고 한 글자씩 돌아가면서 봐야 하니까 for문을 사용했어요
  • answer.append(morse[i])
    • morse는 딕셔너리 형태로 기입돼 있어요
    • 그렇다면 for문에서 만들어준 i는 morse의 key 역할이 되는 거예요
    • 딕셔너리에서 key을 입력해 주면 value값이 출력되기 때문에 그 값을 answer에 append 해주었어요
    • 🔥append를 쓸 때, answer이 answer = '' 이 형태면 추가 안 돼요. answer = []로 변경해 주셔야 추가 가능합니다.
  • return ''.join(answer)
    • answer에는 ""이 형태로 들어가져 있을 거예요
    • 그래서 join을 써서, 결괏값과 동일하게 만들어주면 문제 해결!

 

2.3. 팩토리얼

https://bmk0703.tistory.com/98

def solution(n):
    answer = []
    fac = 1 # 곱해줘야 하니까 1부터 시작
    
    for i in range(1,11):   # 최대 팩토리얼은 10
        fac *= i    # 팩토리얼 코드
        if fac <= n:    # 10! 값보다 작아야 함
            answer.append(i)
        
    return answer[-1]	# 리스트에 들어간 끝 숫자만 출력

 

 

와,, 6점이나 주는 문제였네요 🙄 

어쩐지,, 너무 힘들더라,, 하,,

 

2.4. 숨어있는 숫자의 덧셈(2)

def solution(my_string):

    answer = ''.join(i if i.isdigit() else ' ' for i in my_string)
    # my_string에서 isdigit() 함수를 통해, 숫자를 ''에 기입
    # 숫자가 아닐 경우 공백으로 ''에 기입
    return sum(int(i) for i in answer.split())
    # 공백으로 나눈 answer를 split()으로 구분하여 숫자를 sum
    # i는 ''문자열화이기 때문에 int로 변환

https://bmk0703.tistory.com/99

🤔 문제 풀이

  • answer = ''.join(i if i.isdigit() else ' ' for i in my_string)
    • ''.join() 함수를 써서, ()에 바로 조건을 적어주었어요
    • 뒤에서부터 해석할게요
      • for i in my_string
        • my_string을 i로 돌릴 겁니다.
      • if i.isdigit()
        • 만약 i가 숫자라면 i값 그대로 join 해줄 거예요
      • else ' '
        • 아니라면 '' 공백으로 join 해줄게요
    • 이 모든 걸 answer에 담아냈어요
  • return sum(int(i) for i in answer.split())
    • 궁극적인 목표는 문자열에 있는 숫자들의 합이었어요
    • 그래서 return으로 sum을 해줄 거예요
      • for i in answer.split()
        • 아까 my_string을 숫자인 값을 answer에 join 해주고, 문자면 ''공백으로 기입했죠?
        • answer을 공백으로(.split) 구분한 것을 i에 넣어줄게요
      • sum(int(i))
        • 그 i를 int형으로 변환하여 sum 해주면 문제 해결!

 

 

하,, 8트만에 띄운 파란색 글자를 보니까 너무 힘들어요,, 🙄

기쁜 감정보다는 해방이라는 생각부터 들었던 문제였어요,,

 

 

ㅋㅋ 9점짜리였네

어려웠던 문제였네요


오후(14:00 ~ 18:00)

3. 밍글데이

다 같이 포인트를 걸고 미니 게임도 하고,

캠핑장에 모여서 제출한 사연도 읽어 보니까 행복했어요

이대로 다 좋은 인연들이 이어져 갔으면 좋겠어요

뭉클하더라구요 ㅠㅠ 덕분에 감동도 많이 받아서 마음이 따뜻해진 시간이었어요

 

4. 마크다운

https://bmk0703.tistory.com/100

 

[Markdown] Basic Syntax

본문 출처🔗목차제목 글씨 크기 : #문단 나누기줄 바꾸기볼드체 : **text**, __text__기울림체 : *text*, _text_볼드체&기울림체 : ***text***, ___text___인용문 두 줄 이상인용문 속 인용문인용문 안에 문단 만

bmk0703.tistory.com

 

5. Github 협업하기

https://bmk0703.tistory.com/101

 

[Github] 협업하기 위해서 설정하기

흐름 요약 포크(fork): 다른 사람의 리포지토리를 내 GitHub 계정으로 복사.클론(clone): 내 로컬 컴퓨터로 복사된 리포지토리 가져오기.브랜치(branch): 독립적으로 작업할 수 있도록 브랜치를 생성하

bmk0703.tistory.com

 

 

 


저녁(19:00 ~ 21:00)

6. 베이직반


마무리

오늘 정말 행복하고 즐거웠던 하루였어요

밍글데이를 기념하여 함께 게임도 많이 하고, 캠핑장 맵에서 사연 낭독도 하고, 도란도란 얘기도 나누었거든요

너무 행복한 하루였어요 꿈만 같아요 😽

 

그리고 프로그래머스 4문제 중에서 2문제가 너무 어려워서 2시간이나 걸렸던 날이에요 ㅋㅋㅋㅋ

몸살 기운이 아직 남아있어서 힘들었지만, 할 건 다 한 제 자신에게 무한한 칭찬을 해주고 싶어요 👏🏻

 

2024년도 고생 많으셨어요

2025년에도 잘 부탁드릴게요 💞

 

감사합니다 💝


흐름 요약

 

  1. 포크(fork): 다른 사람의 리포지토리를 내 GitHub 계정으로 복사.
  2. 클론(clone): 내 로컬 컴퓨터로 복사된 리포지토리 가져오기.
  3. 브랜치(branch): 독립적으로 작업할 수 있도록 브랜치를 생성하여 개발.
  4. 커밋(commit): 작업한 내용을 기록하고 버전 관리.
  5. 푸시(push): 로컬 작업을 GitHub 원격 리포지토리로 업로드.
  6. 풀 리퀘스트(pull request): 변경 사항을 리포지토리 소유자에게 리뷰 요청.
  7. 머지(merge): 변경 사항을 원본 리포지토리의 main 브랜치에 통합.

 

전체 흐름 요약

  1. 리포지토리 생성: A가 프로젝트 리포지토리를 생성하고, B를 협업자로 초대.
  2. 브랜치 생성: B가 자신의 로컬 브랜치를 만들고 작업.
  3. 커밋 및 푸시: B가 작업 후 커밋하고 푸시.
  4. PR 생성: B가 PR을 열어 A에게 코드 리뷰를 요청.
  5. 리뷰 및 병합: A가 PR을 확인하고, 문제 없으면 병합.
  6. 업데이트: B와 A 모두 로컬 저장소를 최신 상태로 업데이트.

두 명의 개발자 A와 B가 있어요 👻
GitHub에서 협업하는 프로젝트가 있다고 해요
그 협업 과정에 대해서 알아볼까요?

 

 

 

1️⃣ GitHub Repository 생성

 

  • 먼저, A가 GitHub에서 새 프로젝트를 시작한다고 가정할게요
  • GitHub에서 새로운 repository를 생성하고, 프로젝트에 필요한 기본적인 파일(예: README.md, .gitignore 등)을 추가합니다.

 

 

① GitHub에 들어가서「Repositories」 를 클릭해주세요!

 

 

② 그러면 초록색으로 New가 뜰 거예요. 눌러주세요!

 

 

「Repository name」에서 이름을 정해주세요

④ Public로 하셔도 되고 Private로 하셔도 됩니다. 저는 Public로 할게요

 

 

「Add a README file」 을 눌러서 함께 생성해줄게요

「Add .gitignore」에서 현재 쓰고 있는 언어를 찾아서 설정해주세요. 저는 Python을 쓰기 때문에 Python으로 했어요

 「Create repository」를 눌러주시면 생성 완료!

 

2️⃣ Collaborator 초대

 

① 이제 B를 프로젝트에 참여하도록 초대할 거예요

「Settings」에 들어가주세요

 

「Collaborators」 섹션에서 B의 GitHub 아이디를 추가해주세요

④ 그렇게 되면 B의 📬이메일로 메시지를 받게 되고, 이를 수락하면 같은 repository에서 협업할 수 있게 돼요

 

3️⃣ 로컬 저장소 클론 (Clone)

① 이제 B는 GitHub에서 A가 만든 repository를 로컬 컴퓨터로 클론(clone)하여 작업을 시작해야 해요

② Repository에서 「<> Code」 버튼을 누르시면 해당 주소가 보일 거예요. 복사해주세요

 

# bash
git clone https://github.com/username/repository-name.git

 

③ 터미널을 켜서 로컬 컴퓨터에 클론(clone) 해줄게요

 

# desktop으로 가기
~ % cd desktop
Cloning into 'Project'...
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (4/4), done.

 

 

 

④ 이렇게 되면 바탕화면에 폴더가 생성돼 있을 거예요

 

4️⃣ 새로운 브랜치 생성 및 작업

VSCode

① 협업 시, 보통 메인 브랜치(main/master)에서 바로 작업하지 않고, 각자 작업할 브랜치를 만들어서 써요

② 이제, B는 새로운 브랜치를 생성하고 그 브랜치에서 작업을 시작해요

# 브랜치 생성
## git swith -c branch_name
git swith -c A_branch

 

 

③ B는 이 브랜치에서 코드를 수정하거나 새로운 기능을 개발할 수 있게 돼요

 

5️⃣ 로컬 변경 사항 커밋

      ▲ 왼쪽 하단을 보면 지금 main에 있는지, branch에 있는지 확인 가능해요

git add file_name
git commit -m "A comment"

 

① 작업이 끝난 후, B는 변경된 파일들을 Git에 추가하고 commit 해요

 

6️⃣ 원격 저장소에 푸시 (Push)

 

① 변경 사항을 로컬에서 커밋한 후, B는 해당 브랜치를 GitHub의 원격 저장소에 푸시(push) 해요

git push origin branch name
$ git push origin A_branch
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 8 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 538 bytes | 538.00 KiB/s, done.
Total 5 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), done.
remote: 
remote: Create a pull request for 'A_branch' on GitHub by visiting:
remote:      https://github.com/minkyungbae/Project/pull/new/A_branch
remote: 
To https://github.com/minkyungbae/Project.git
 * [new branch]      A_branch -> A_branch

 

이렇게 결과창이 우르르 나온다면 된 거예요

 

7️⃣ 풀 리퀘스트 (Pull Request, PR) 생성

B가 작업한 브랜치를 GitHub에서 A에게 머지(Merge)하라고 요청하기 위해 **Pull Request(PR)**를 생성해요

 

 

「Compare & pull request」버튼을 눌러도 되고, 상단에 「Pull requests」 버튼을 눌러서 PR을 생성할게요

 

 PR을 작성할 때, 어떤 변경을 했는지 간단한 설명을 추가하는 것이 좋아요

 

8️⃣ A의 리뷰 및 피드백

① A는 PR을 열어 B가 작성한 코드를 확인해요

② 코드에 문제가 없으면 PR을 승인하고, A_branch를 main 브랜치에 병합할게요

(코드에 문제가 있으면 피드백을 남기고, B는 다시 해당 부분을 수정한 후 PR을 업데이트하면 돼요)

 

 

 

9️⃣ 브랜치 병합 (Merge)

① A가 PR을 승인하고, 병합(Merge)을 클릭하면, B의 작업이 main 브랜치에 반영돼요

                                ▲ 클릭!

 

                                 ▲ 클릭하면 merge 돼요

 

🔟 협업 종료 후 로컬 업데이트

① 이제 A, B 모두 최신 자료를 GitHub에서 로컬로 받아와야 해요

A, B 모두 최신 파일로 관리하는 것이 중요해요

git switch main		# main으로 가기
git pull origin main	# GitHub main에 있는 최신 자료 받아오기

 

‼ 충돌은 얼마든지 발생할 수 있는 것이니, 당황하지 않고 VSCode처럼 로컬에서 해결 후 push 해주시면 됩니다 !!


 

'함수 정리 > Git' 카테고리의 다른 글

Git 명령어  (0) 2024.12.14

본문 출처🔗


목차

  1. 제목 글씨 크기 : #
  2. 문단 나누기
  3. 줄 바꾸기
  4. 볼드체 : **text**, __text__
  5. 기울림체 : *text*, _text_
  6. 볼드체&기울림체 : ***text***, ___text___
  7. 인용문 두 줄 이상
  8. 인용문 속 인용문
  9. 인용문 안에 문단 만들기
  10. 순서 있는 리스트 만들기 : 숫자 기입
  11. 순서 없는 리스트 만들기 : -, *, +
  12. 인용구
  13. 링크

Markdown

<제목 글씨 크기>

Markdown HTML 출력 예시 주의점
# Heading level 1 <h1>Heading level 1</h1>

제목 레벨 1

#Hi ❌
# Hi ✅
(#) 뒤에 띄어쓰기 꼭 해주세요
## Heading level 2 <h2>Heading level 2</h2>

제목 레벨 2

 
### Heading level 3 <h3>Heading level 3</h3>

제목 레벨 3

 
#### Heading level 4 <h4>Heading level 4</h4>

제목 레벨 4

 
##### Heading level 5 <h5>Heading level 5</h5> 제목 레벨 5  
###### Heading level 6 <h6>Heading level 6</h6> 제목 레벨 6  

 


<문단 나누기>

<p>,</p>

Markdown HTML 출력 예시
I really like using Markdown.

I think I'll use it to format all of my documents from now on.
<p>I really like using Markdown.</p>

<p>I think I'll use it to format all of my documents from now on.</p>
I really like using Markdown.

I think I'll use it to format all of my documents from now on.

<줄 바꿈>

<br>  

Markdown HTML 출력 예시 주의점
This is the first line.  
And this is the second line.
<p>This is the first line.<br>
And this is the second line.</p>
이게 첫 번째 줄이에요.
그리고 이게 두 번째 줄이에요.
<br> 뒤에 띄어쓰기 두 번!

<볼드체> 

<strong>,</strong>

**text**, __text__

Markdown HTML 출력 예시
I just love **bold text**. I just love <strong>bold text</strong>. I just love bold text.
I just love __bold text__. I just love <strong>bold text</strong>. I just love bold text.
Love**is**bold Love<strong>is</strong>bold Loveisbold

<기울림체>

<em>,</em>

*text*,_text_

Markdown HTML 출력 예시
Italicized text is the *cat's meow*. Italicized text is the <em>cat's meow</em>. Italicized text is the cat’s meow.
Italicized text is the _cat's meow_. Italicized text is the <em>cat's meow</em>. Italicized text is the cat’s meow.
A*cat*meow A<em>cat</em>meow A cat meow

 


<볼드체&기울림체>

<em><strong>,</strong></em>

***text***, ___text___

Markdown HTML 출력 예시
This text is ***really important***. This text is <em><strong>really important</strong></em>. This text is really important.
This text is ___really important___. This text is <em><strong>really important</strong></em>. This text is really important.
This text is __*really important*__. This text is <em><strong>really important</strong></em>. This text is really important.
This text is **_really important_**. This text is <em><strong>really important</strong></em>. This text is really important.
This is really***very***important text. This is really<em><strong>very</strong></em>important text. This is reallyveryimportant
text.

<인용문 두 줄 이상>

> Dorothy followed her through many of the beautiful rooms in her castle.
>
> The Witch bade her clean the pots and kettles and sweep the floor and keep the fire fed with wood.


<인용문 안에 인용문>

> Dorothy followed her through many of the beautiful rooms in her castle.
>
>> The Witch bade her clean the pots and kettles and sweep the floor and keep the fire fed with wood.


<인용문 안에 문단 만들기>

> #### The quarterly results look great!
>
> - Revenue was off the chart.
> - Profits were higher than ever.
>
>  *Everything* is going according to **plan**.


<순서 있는 리스트 만들기>

<ol>

<li>,</li> ⬅️ 이게 번호를 뜻함

</lo>

Markdown HTML 출력 예시
1. First item
2. Second item
3. Third item
4. Fourth item
<ol>
  <li>First item</li>
  <li>Second item</li>
  <li>Third item</li>
  <li>Fourth item</li>
</ol>
  1. First item
  2. Second item
  3. Third item
  4. Fourth item
1. First item
1. Second item
1. Third item
1. Fourth item
<ol>
  <li>First item</li>
  <li>Second item</li>
  <li>Third item</li>
  <li>Fourth item</li>
</ol>
  1. First item
  2. Second item
  3. Third item
  4. Fourth item
1. First item
8. Second item
3. Third item
5. Fourth item
<ol>
  <li>First item</li>
  <li>Second item</li>
  <li>Third item</li>
  <li>Fourth item</li>
</ol>
  1. First item
  2. Second item
  3. Third item
  4. Fourth item
1. First item
2. Second item
3. Third item
    1. Indented item
    2. Indented item
4. Fourth item
<ol>
  <li>First item</li>
  <li>Second item</li>
  <li>Third item
    <ol>
      <li>Indented item</li>
      <li>Indented item</li>
    </ol>
  </li>
  <li>Fourth item</li>
</ol>
  1. First item
  2. Second item
  3. Third item
    1. Indented item
    2. Indented item
  4. Fourth item

<순서없는 리스트 만들기>

<ul>

<li></li> ⬅️ 이게 원을 뜻함

</ul>

-, *, +

Markdown HTML 출력 예시
- First item
- Second item
- Third item
- Fourth item
<ul>
  <li>First item</li>
  <li>Second item</li>
  <li>Third item</li>
  <li>Fourth item</li>
</ul>
  • First item
  • Second item
  • Third item
  • Fourth item
* First item
* Second item
* Third item
* Fourth item
<ul>
  <li>First item</li>
  <li>Second item</li>
  <li>Third item</li>
  <li>Fourth item</li>
</ul>
  • First item
  • Second item
  • Third item
  • Fourth item
+ First item
+ Second item
+ Third item
+ Fourth item
<ul>
  <li>First item</li>
  <li>Second item</li>
  <li>Third item</li>
  <li>Fourth item</li>
</ul>
  • First item
  • Second item
  • Third item
  • Fourth item
- First item
- Second item
- Third item
    - Indented item
    - Indented item
- Fourth item
<ul>
  <li>First item</li>
  <li>Second item</li>
  <li>Third item
    <ul>
      <li>Indented item</li>
      <li>Indented item</li>
    </ul>
  </li>
  <li>Fourth item</li>
</ul>
  • First item
  • Second item
  • Third item
    • Indented item
    • Indented item
  • Fourth item

<인용구>

* This is the first list item.
* Here's the second list item.

    > A blockquote would look great below the second list item.

* And here's the third list item.


<링크>

I love supporting the **[EFF](https://eff.org)**.
This is the *[Markdown Guide](https://www.markdownguide.org)*.
See the section on [`code`](#code).

 

 

'함수 정리 > Markdown' 카테고리의 다른 글

[Markdown] Sample Syntax  (4) 2024.12.14

+ Recent posts