안녕하세요 :)
오리파입니다.
부트캠프를 시작한 지 어느덧
일주일이 지났다는 게 믿기지 않아요.
앞으로 한 주가 끝날 때마다
1) 무슨 내용을 배웠는지(인상적인 것 위주로)
2) 일주일 동안 어떤 고민을 했는지
3) 좋았던 점 & 아쉬웠던 점
크게 이렇게 세 가지 내용이 포함된 회고록을 작성하게 될텐데,
1주차이니까 간단한 제 소개와
왜 이 부트캠프를 선택했는지 먼저 작성해보겠습니다.

0.(1) 간단한 자기 소개
- 요약: 이화여대 뇌인지과학과 졸업 후 독일 유학 준비 & 데이터 분석 취준 중
- 교양 수업으로 Python 접한 후, 컴퓨터 언어에도 관심이 생겨 컴공 부전 결정.
- 컴공 부전공은 안타깝게도 유학 때문에 졸업해야해서 중도 포기
- 졸업 후 약 2년간 독일어 C1에 해당하는 언어 자격증 취득에 매진
- 독일 원서 지원 후 취업 준비에 매진하며 Python 독학 및 자격증 취득
( ADsP, SQLD, MOS WORD, MOS EXCEL 자격증 취득, TOEIC 965, IELTS overall 7.5 ,TestDaF 5444)
- 데이터 분석 직군을 고른 이유:
혹시 대학 or 대학원에서 떨어지더라도 해당 직군 수요가 많아
한국에서 경력을 쌓아 독일로 나갈 수 있을 가능성이 높다고 생각해서.

0. (2) 부트캠프에 참여하게 된 이유
1. 취업 준비
제가 부트캠프에 참여하게 된 가장 큰 이유입니다.
2월부터 6월까지 약 5개월간 혼자 취업 준비를 해본 결과,
요즘 취업이 특히 IT 직군이 쉽지 않다고 느꼈습니다.
요즘은 경력있는 분들이 신입 포지션에 지원하는 일들이 많다고 들었는데,
실제로 지원하고 면접을 보는 과정에서 이를 실감하기도 했고,
( 신입 뽑는다면서 가르치기 싫고 알아서 했으면 좋겠다는 말을 들었음..)
신입에게 요구하는 요건들이 굉장히 많다는 걸,
특히 비전공자에게는 더욱이 문턱이 높다는 걸 깨달았습니다.
회사마다 요구하는 데이터 분석 Tool도 달라서
어느 걸 어떻게 준비해야할지 혼란스러웠어요.
당장 취업을 할 수 있는 곳들은 문서작업과 간단한 업무 위주인 곳이 많아서
전문성이 떨어진다고 생각했고, 첫 회사로는 적합하지 않다고 생각했습니다.
이러한 여러 이유로 전반적인 데이터 분석에 대해 가르쳐주고
포트폴리오도 만들 수 있는 부트캠프를 찾게 되었습니다.
여러 부트 캠프 중 SK 네트웍스를 선택한 건,
오프라인 수업, 많은 후기, 멘토링, 위치 등의 이유에서 였습니다.
2. 철저한 관리 시스템
아무래도 성인들이 모여서 듣는 수업이다보니,
공부 분위기가 가장 걱정이 되었습니다.
출석이라든지.. 수업 태도라든지..
서로 긍정적인 자극을 줄 수 있는 환경이면 좋겠다고 생각했는데,
1주차 수업을 듣고 난 후 끝까지 완주해보기로 마음을 굳혔습니다 :)
전담 강사님과 매니저 두 분이서 계속 신경써주시기도 했고,
학생들끼리 자유롭게 의견 및 꿀팁을 공유하는 분위기라서 완전 만족했습니다!
1. 이번주에 배운 내용 (인상적이었던 것)
(1) Python
- 언더바의 주요 기능 3가지
1. 특정값 무시
x, _, z = 1, 2, 3 # 언더바를 씀으로써 x와 z에만 값을 저장할 수 있게 해준다.
2. 변수명 생성
for_ , else_ #키워드에 언더바를 붙여 변수명을 생성할 때 쓴다. ( 추천하지 않음. )
3. 마지막 값 가져오기
a = 3
b = 5
print(_) #가장 마지막에 있는 값을 가지고 온다.
- method 란?
메소드( method ) : 특정 자료형에서만 작동하는 함수
(1) 인플레이스 연산을 하는 메소드
- 인플레이스 연산 : 연산을 한 후 연산값을 해당 변수에 저장 및 수정
ex. a = [ 1, 2, 3 ]
a.sort(reverse=True) # a를 내림차순으로 정렬
print(a) # a = [ 3, 2, 1 ]
-> 이렇게 따로 변수 a에 저장하지 않아도 알아서 연산한 값을 저장한다.
(2) 인플레이스 연산을 하지 않는 메소드
- 연산한 값을 따로 저장해줘야함.
ex. sorted(a) # a를 오름차순으로 정렬
print(a) # [ 1, 2, 3 ]
(3) 메소드 찾는 곳 : The Python Standard Library — Python 3.13.5 documentation
- 여러가지 자료형의 특징
| 자료형 종류 | 예시 | 수정 가능 여부 | 인덱싱 & 슬라이싱 가능 여부 |
| 리스트 | a = [ 1, 2, 3 ] | 수정 가능 | 인덱싱, 슬라이싱 모두 가능 |
| 딕셔너리 | a = { x: 1, y: 2, z: 3 } | key는 수정 가능 value는 수정 불가 | 가능( key 로 인덱싱 가능 ) 슬라이싱 불가...? |
| 셋 | a = { 1, 2, 3 } | 수정 불가능 | 인덱싱, 슬라이싱 모두 불가 |
| 튜플 | a = ( 1, 2, 3 ) | 수정 불가능 | 인덱싱, 슬라이싱 모두 가능 |

* 튜플의 수정 불가능에 대한 도전
a = ( 2025, 'SKN', 17, 3.14, ['h','e','l','l','o'] )
a[4][2] = 's'
print(a) # ( 2025, 'SKN', 17, 3.14, ['h','e','s','l','o'] )
마치 튜플 값이 수정된 것처럼 보인다.
-> 데이터 저장 장소와 관련있다.
튜플 안에 리스트가 있다면, 리스트 자체가 튜플 데이터 저장소에 저장되는 것이 아니라 리스트의 주소가 저장됨.
- in 의 활용
location = [ 'a', 'b', 'c', 'd', 'e' ]
print( 'a' in location) # True
print('a ' in location) # False
-> in 연산은 공백도 중요하게 생각!
location = [ 'a', 'b', 'c', 'd', 'e' ]
print( ['a','b'] in location ) # False
-> True가 되려면 location이 [ [ 'a', 'b' ] , 'c', 'd', 'e' ] 이어야 함.
- 복합적인 논리 연산 불가
python에서는 1 < x < 3 이런 논리 연산 불가능
1 < x and x < 3 이렇게 써줘야함.
- 함수의 매개변수와 인자
매개변수 : 함수를 정의할 때 괄호 안에 들어가는 것
인자 : 실제 값
ex.
def locate ( location ) : # 이때 location은 매개변수
print( location )
locate( [ 1, 2 ] ) # [1,2] 는 인자
- 인자의 두 종류 : 위치 인자, 키워드 인자
(1) 위치 인자 : 해당 위치에 값을 넣어줌
(2) 키워드 인자 : 매개변수명 = 값 이렇게 값을 넣어줌
def locate ( location , number ) :
print( location , number )
locate( [1,2] , 3 ) # [1,2] 과 3은 위치 인자
locate( location=[1,2], number = 3 ) # [1,2]
locate( number=3 , [1,2] ) # 키워드와 위치 인자가 같이 올 경우, 무조건 키워드 인자 먼저 써줘야함
- Call By Value vs Call By Reference
- Call By Value : 복사본을 따로 만들어서 주기 때문에, 복사본 바꿔도 원본에 영향 X
- Call By Reference : 복사해서 주면 데이터가 있는 주소를 복사하기 때문에, 복사본 바꾸면 원본이 영향을 받는다.
a = [ 3, 2, 1 ]
b = a
b. sort()
print(a) # [ 1, 2, 3 ]
print(b) # [ 1, 2, 3 ]
a = [ 3, 2, 1 ]
b = a.copy()
b. sort()
print(a) # [ 3, 2, 1 ]
print(b) # [ 1, 2, 3 ]
2. 일주일동안 고민한 내용
(1) 야구 게임

수업 시간에 선생님께서 숙제로 내주신 야구 게임에 도전해봤습니다.

사용자가 input으로 (home을 제외하고) 세 자리 숫자만을 입력하게 하기 위해서
숫자가 아닌 것을 입력하는 경우와 세 자리가 아닌 수를 입력한 경우에는
isdigit 메소드와 len 함수를 활용해 다시 입력하도록 했습니다.



가장 많이 생각했던 것은 'ball의 갯수를 어떻게 셀 것인가'였습니다.
strike의 갯수는 for 문을 이용해 정답인 A의 각 자리 숫자와
사용자가 입력한 B의 각 자리 숫자를 비교하는 식으로 해결했지만,
ball의 경우 위치는 다르지만 숫자가 정답인 A에 있어야하므로
B에서 strike인 숫자를 제거하고 A와 비교하는 함수를 정의했습니다.
A와 B를 리스트로 만들어 각각 A_list, B_list에 저장했습니다.
strike가 0이 아니라면 위치가 같은 숫자가 하나라도 있는 것이므로,
strike인 숫자의 인덱스를 저장했던 strike_index 리스트를 내림차순 정리해
뒤에서부터 차례로 B_list에서 제거하는 식으로 해결하려고 했습니다.
(index를 오름차순으로 놓고 제거할 경우,
제거한 후 또 for 문을 실행할 때 index가 달라지는 것을 고려해 뒤에서부터 제거함.)
그 후, strike가 제거된 B_list에서 A_list에 있는 값이 있는지 확인했습니다.
( 수업시간에 배운 in 활용 )

(2) 야구 게임 확장판
해당 코드를 작성 후 정답이 되는 세자리 숫자를 랜덤으로 생성해보고 싶었습니다.
이를 위해서 randint 메소드를 사용해 랜덤 숫자를 생성하는 함수를 정의해봤습니다.
함수를 정의한 후, 세 자리수 ~ 다섯 자리수까지 랜덤으로 생성해주는 함수로 확장시켰습니다.

( number는 자릿수 게임 시작부분에 randint(3,5)를 활용해 3자리, 4자리, 5자리 중 하나가 생성되도록 함. )
number_list에 0부터 9까지 숫자를 담고
0부터 9까지 랜덤으로 인덱스를 생성해 num에 저장한 후
number_list에서 해당 인덱스에 해당하는 숫자를 A 리스트에 추가했습니다.
A 리스트에 추가한 후에는 number_list에서 해당 값을 제거해
중복되는 값이 A 리스트에 추가될 수 없도록 했습니다.
또, 맨 첫 자리에는 0이 될 수 없으므로 if 구문을 활용해 해당 경우를 제거했습니다.

세 자리 수일 때는 기회를 9번 주었지만
네 자릿수와 다섯 자릿수는 기회를 좀 더 주어야하지 않을까 싶어서
네 자리수와 다섯 자리 수는 각각 1번, 2번씩 더 기회를 주었습니다.
(3) 직접 디자인한 게임
이 외에도 제가 직접 디자인한 게임을 고민해보고 코드를 짜고 있습니다.
이번주 안으로 완성하는 것이 목표입니다 :)

3. 좋았던 점 & 아쉬웠던 점
< 좋았던 점 >
1) 다양한 배경의 사람들이 모두 '데이터 분석 학습' 이라는 목표로 공부할 수 있는 환경이라는 것이 좋았습니다.
2) 학습 수준이 다르다보니 시간이 남는 수업이 많았는데, 코딩 테스트를 준비해보는 것도 좋다고 강사님께서 방향성을 잡아주셔서 좋았습니다.
3) 쉬운 내용부터 숙련자에게도 어려울 수 있는 내용까지 커버해주셔서 수업 시간에 기본기도 점검하고 응용할 수 있는 힘을 기르게 된 것 같습니다.
4) 개인적인 얘기지만, 지각하지 않고 매일 매시간 열심히 집중해서 수업을 들었던 것 같아서 뿌듯합니다 :)
< 아쉬웠던 점 >
1) 아직 일 스케줄을 완전히 정리하지 못해서 이번주 조퇴를 2번이나 하게 되어서 아쉬웠습니다.
2) 원래 매일 목표가 "수업 내용 정리 & 개인 공부 & 코딩테스트 (조금씩) 준비"였는데 원했던 목표만큼 하지는 못했던 것 같습니다. 일 때문에 바쁜 것도 있었지만 생각보다 배운 내용이 많아 복습하는 데에만 시간이 많이 들었습니다. 앞으로 요일마다 다른 목표를 잡아 공부해야할 것 같습니다.
2주차도 힘내보겠습니다 화이팅 :)
