[HARMAN] 세미콘 아카데미/공부내용

[Harman 세미콘 아카데미]Day_3(Python 기초)

uiop1716 2025. 2. 6. 23:18

3일차.

아침에 교육을 들으러 화곡역에서 내리며 지하철역에서 진동을 하는 옛날 토스트에 이끌려 소세지빵과 고로케를 친구와 나눠먹으며 함께 하루를 시작했다.

점심시간에는 조원들과 짬뽕도 먹으며 조금 더 친해질 수 있었다. (I인 나에겐 최대 수확이였다)

 

오늘은 반복문, 정렬, 딕셔너리에 대해 중점을 두고 공부했던 것 같다.

 

반복문: 프로그램 내에서 똑같은 명령을 일정 횟수만큼 반복하여 수행하도록 제어
            for : 반복 횟수 명확할 때
            while : 반복 횟수가 명확하지 X

 

먼저, while 문의 형태(?)는 두개로 나뉜다. 이상하게 써도 아시는 분들은 다 아실거라 믿는다...ㅎ

1) while True:
             if(조건문):
                     print("")
                     break ---> 무한 루프를 빠져 나오기 위함
              else:
                    무한 반복문 실행

2) while 조건식:
               실행문
               실행문
               탈출문

 

-----> 개인적으로 1번의 형태를 사용하는게 더 편하다. (마음대로 if문을 추가하며 제어할 수 있어서)

 

while 문에 대한 실습으로

다이어트 프로그램

 

Random 함수를 활용하여 While문에 대한 실습도 진행하였다. (Python에서 사용하는 함수에 대해서도 많이 배운다)

Random 활용 While문 예제

 

반복문의 쌍두마차 for문. 코딩을 해본 사람들에겐 매우 친숙할 것이다.

 

for문: 반복 횟수가 명확함
     ㄴ형태 : for (변수) in 문자열(리스트/튜플):
                                 print(변수)

   range() 함수 활용 -> 범위 연산자
   range(start ,end ,step)  --->C언어의 for문 형태
   or  range(start ,end)    ---> step 기본값 1
   or  range(end) ---> start 기본값 0, step 기본값 1
    ****start = inclusive, end = exclusive이므로 end에 유의하자****

 

for문에 대한 실습 과정

 1) 오랜만에 해본 별찍기... Hard 코딩부터해서 방법이 많다...

별찍기 1

 

별찍기2 & 3 & 4 ...나름 재미있다 ㅎ

별찍기 2 & 3 & 4

for문을 활용한 다양한 예제들... in 활용 & len 활용  

for문 예제

2번째의 for문의 경우, i를 활용해 한번에 처리할 경우, tuple의 index는 0부터 시작하고 학생의 번호는 1 부터 시작하기

때문에, 학생의 번호의 경우에는 i+1로 수정하여 출력한다.

 

 

정렬 알고리즘 : 원소들을 일정한 순서대로 열거하는 알고리즘으로 치환을 기본으로 활용한다.

다른 언어들과 차별화 되는 Python의 치환 방법

 

 1) Bubble Sort : 인접한 수를 비교하며 정렬, 코드가 단순하다

         형태: for i in range(0,len(list1)):
                       for j in range(i+1,len(list1)):
                              if(list1[j] < list1[i]):
                              list1[i], list1[j] = list1[j], list1[i]
                       print(list1)

버블정렬 실습1
이중for문 활용한 버블 정렬

 


 2) Selection Sort : 가장 큰 원소 or 가장 작은 원소를 찾아 리스트(처음~ 끝)을 교체해 나가는 방법


     1. 최솟값을 먼저 찾고, 맨 앞의 인덱스와 자리 바꿈
     2.  다시한번 최솟값을 찾고, 2번째 인덱스랑 바꿈
     3. 쭉쭉쭉하면서 작은값들을 왼쪽에서부터 정렬
     4. 결과: 오름차순 정렬이 됨

 

    --->아랫 분의 블로그를 참고하시면 이해하기 훨씬 쉬우실겁니다...

   (참고) https://gmlwjd9405.github.io/2018/05/06/algorithm-selection-sort.html

선택 정렬 실습

 

 

탐색: 원하는 값이나 인덱스를 찾기 위한 알고리즘

1) Sequential search : 하나를 찾기 위해 처음부터 끝까지 차례대로 찾아 나감 (가장 단순한 방법)

2) Binary Search: 리스트의 중간값을 이용해 비교하여 정렬
*****조건: 리스트가 정렬이 되어 있어야 사용 가능 *********
1. 리스트의 중간 인덱스를 기준으로 삼음
2. 찾고자 하는 값이 mid_index의 값보다 크면 왼쪽 값들 다 버림(작으니깐)
        3. low_index를 mid_index+1로 설정하고 mid_index를 다시 조정
4. 찾고자 하는 값이 mid_index의 값보다 작으면
   high_index를 mid_index-1로 설정하고 mid_index를 다시 조정 
5. 찾을때까지 mid_index에 대한 값을 바꾸는 과정

이진 탐색 실습

 

----> 2진 탐색에 대해 실습을 하며 이런식으로도 정렬을 하는구나... 하면서 실습을 진행했던 것 같다.

 

Dictionary : key - value 쌍을 가지고 있는 자료형, 단어 그대로 사전과 같다... oxford English Dictionary

               형태: 딕셔너리명 = {}

                         딕셔너리명 = { "key" : "value" } 

               ***** key에는 변하지 않는 값을, value에는 변해도 되는 값을 넣는다 *****

               또한, list와 같이 key 와 value를 추가, 삭제도 가능하다

 

딕셔너리에서 값을 가져오는 2가지 방법도 배웠다.

list에서 index의 값을 불러오는 것과 유사한 방법과 .get()을 활용하는 방법

 

in 을 활용하여 특정 값이 존재하는지 확인 & clear 를 활용하여 모든 데이터도 지울 수 있다. (매우 간편해서 좋다...)

 

key와 value의 값을 따로 또는 다 같이 불러 올 수 있는 방법도 실습하였다.

 

하나의 딕셔너리를 활용할 수 있는 여러 방법들이 많은 것 같다. 딕셔너리의 형태는 낯익진 않지만 재미있는 것 같다..ㅋ

 

예제들도 풀어보았다. 

 

먼저, 오늘의 수업이 모두 끝나가는 시점에 팀원들의 피로도를 딕셔너리 형태로 구성하여 평균 피로도를 구하는 문제를 풀었다. 위에서 배운, value를 뽑아 사용하는 방법을 사용하여 평균을 구한다. 평균 86.25% 다들 피곤한가보다...

 

또한, 교수님께서 박스오피스에서 제공하는 자료를 보여주셨다. 자료는 딕셔너리 형태로 어제 영화관에서 발표한 영화명, 수익, 일일 관객 등에 대한 여러 정보를 포함하고 있었다.

이를 for문을 활용하여 1~10위의 영화들을 정렬하며 딕셔너리에 대해 더 재미있게 배울 수 있었다.

 

 

 

느낀점: 학부시절 분명 딕셔너리에 대해 배운 것 같은데... 잘 기억이 안난다. 구면인듯 초면인 느낌... 익숙하지 않아서 실습을 하며 이해하는데 조금 서툴렀지만, 배운 내용을 잘 복습하여 내일하게 될 딕셔너리 관련 예제 실습을 잘 해내어 나만의 지식으로 남기고 싶다.