diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..4f18a5a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+CCTV_PJT/
\ No newline at end of file
diff --git a/03117_bae/main.py b/03117_bae/main.py
deleted file mode 100644
index a9d5247..0000000
--- a/03117_bae/main.py
+++ /dev/null
@@ -1,7 +0,0 @@
-x = 2.4
-dkdkdk = 3.4
-c = x + dkdkdk
-# 주석
-# 아무거나
-# 추가 아무거나
-# 설명
\ No newline at end of file
diff --git "a/03122_Ji/2\354\243\274\354\260\250/importantroad_ji.py" "b/03122_Ji/2\354\243\274\354\260\250/importantroad_ji.py"
new file mode 100644
index 0000000..d3aacad
--- /dev/null
+++ "b/03122_Ji/2\354\243\274\354\260\250/importantroad_ji.py"
@@ -0,0 +1,18 @@
+# https://school.programmers.co.kr/learn/courses/30/lessons/214293
+# 자율주행 시스템은 도시 내에 있는 n개의 지점을 연결하는
+# 양방향 도로 m개의 교통량을 분석해서 예상 소요 시간을 실시간으로 계산합니다.
+# 만약 어떤 도로의 길이가 L이고 교통량이 T라면
+# 해당 도로를 통과하는데 L + T분이 소요됩니다. (0 ≤ T)
+#
+# 제한사항
+# 2 ≤ n ≤ 50,000
+# 1번 지점이 출발지, n번 지점이 목적지입니다.
+# n - 1 ≤ roads의 길이 = m ≤ 200,000
+# roads[i]는 i+1번 도로에 대한 정보를 담고 있으며 [U, V, L, T] 형태의 길이가 4인 1차원 정수 배열입니다.
+# U번 지점과 V번 지점을 연결하는 길이 L, 교통량 T인 도로를 의미합니다.
+# 1 ≤ U < V ≤ n
+# 1 ≤ L ≤ 109
+# 0 ≤ T ≤ 109
+# 서로 다른 두 지점을 직접 연결하는 도로는 최대 1개입니다.
+# 도로를 통해 한 지점에서 다른 지점으로 이동하는 방법이 항상 존재합니다.
+
diff --git "a/03122_Ji/2\354\243\274\354\260\250/kingQ_Ji.py" "b/03122_Ji/2\354\243\274\354\260\250/kingQ_Ji.py"
new file mode 100644
index 0000000..5bc2197
--- /dev/null
+++ "b/03122_Ji/2\354\243\274\354\260\250/kingQ_Ji.py"
@@ -0,0 +1,95 @@
+# https://www.acmicpc.net/problem/1063
+# 8*8크기의 체스판에 왕이 하나 있다. 킹의 현재 위치가 주어진다. 체스판에서 말의 위치는 다음과 같이 주어진다.
+# 알파벳 하나와 숫자 하나로 이루어져 있는데, 알파벳은 열을 상징하고, 숫자는 행을 상징한다.
+# 열은 가장 왼쪽 열이 A이고, 가장 오른쪽 열이 H까지 이고, 행은 가장 아래가 1이고 가장 위가 8이다.
+# 예를 들어, 왼쪽 아래 코너는 A1이고, 그 오른쪽 칸은 B1이다.
+
+# 킹은 다음과 같이 움직일 수 있다.
+
+# R : 한 칸 오른쪽으로
+# L : 한 칸 왼쪽으로
+# B : 한 칸 아래로
+# T : 한 칸 위로
+# RT : 오른쪽 위 대각선으로
+# LT : 왼쪽 위 대각선으로
+# RB : 오른쪽 아래 대각선으로
+# LB : 왼쪽 아래 대각선으로
+# 체스판에는 돌이 하나 있는데, 돌과 같은 곳으로 이동할 때는, 돌을 킹이 움직인 방향과 같은 방향으로 한 칸 이동시킨다. 아래 그림을 참고하자.
+# 입력으로 킹이 어떻게 움직여야 하는지 주어진다. 입력으로 주어진 대로 움직여서 킹이나 돌이 체스판 밖으로 나갈 경우에는 그 이동은 건너 뛰고 다음 이동을 한다.
+# 킹과 돌의 마지막 위치를 구하는 프로그램을 작성하시오.
+
+# 입력
+# 첫째 줄에 킹의 위치, 돌의 위치, 움직이는 횟수 N이 주어진다. 둘째 줄부터 N개의 줄에는 킹이 어떻게 움직여야 하는지 주어진다. N은 50보다 작거나 같은 자연수이고, 움직이는 정보는 위에 쓰여 있는 8가지 중 하나이다.
+
+# 출력
+# 첫째 줄에 킹의 마지막 위치, 둘째 줄에 돌의 마지막 위치를 출력한다.
+
+# R : 한 칸 오른쪽으로
+# L : 한 칸 왼쪽으로
+# B : 한 칸 아래로
+# T : 한 칸 위로
+# RT : 오른쪽 위 대각선으로
+# LT : 왼쪽 위 대각선으로
+# RB : 오른쪽 아래 대각선으로
+# LB : 왼쪽 아래 대각선으로
+
+move = {
+ 'R':(1,0),
+ 'L':(-1,0),
+ 'B':(0,-1),
+ 'T':(0,1),
+ 'RT':(1,1),
+ 'LT':(-1,1),
+ 'RB':(1,-1),
+ 'LB':(-1,-1)
+}
+chessboard_n2a = {1:'A', 2:'B', 3:'C', 4:'D', 5:'E', 6:'F', 7:'G', 8:'H'} # 좌표 계산으로 움직인 후 체스 위치로 변환하기 위한 딕셔너리
+chessboard_a2n = {val:key for key, val in chessboard_n2a.items()} # 초기 위치를 받았을때 좌표로 변환하기 위한 딕셔너리리
+
+class Chessmen:
+ '''
+ 체스말 클래스
+ '''
+ def __init__(self, initial): # 초기 위치(문자열)를 받아서 숫자로 변환 후 리스트에 저장장
+ self.now = []
+ self.now.append(chessboard_a2n[initial[0]])
+ self.now.append(int(initial[1]))
+
+ def where(self): # 현재 위치 반환: 숫자 -> 문자자
+ self.now_board = chessboard_n2a[self.now[0]] + str(self.now[1])
+ return self.now_board
+
+ def move(self, moving_cmd): # 체스말 이동
+ for i in range(2):
+ self.now[i] += move[moving_cmd][i]
+ if self.now[i] > 8 or self.now[i] < 1: # 체스판의 범위를 넘으면 False 반환환
+ return False
+ return True
+
+ def move_back(self, moving_cmd): # 커맨드 반대로 되돌아가는 함수
+ for i in range(2):
+ self.now[i] -= move[moving_cmd][i]
+
+first = input('킹의 위치, 돌의 위치, 움직이는 횟수를 입력하시오:').split() # 한줄에 입력받은 문자열을 나눠서 리스트에 저장장
+
+king = Chessmen(first[0]) # king 객체 초기 위치(문자열) 주며 초기화화
+dol = Chessmen(first[1]) # dol 객체 초기 위치(문자열) 주며 초기화화
+n = int(first[2]) # 반복횟수 숫자로 저장장
+
+def move_chessman(cmd): # 킹 이동 및 돌과 겹치면 돌 이동, 체스판을 넘어가면면 다시 원래 자리로 돌아가게 하는 함수
+ king_next = king.move(cmd) # 킹 이동동
+ if king_next == False: # 킹 이동이 체스판 범위를 넘음
+ king.move_back(cmd) # 킹 움직임 번복
+ elif king.now == dol.now: # 킹과 돌의 위치가 같다
+ dol_next = dol.move(cmd) # 돌을 킹이 움직인 방향으로 움직임
+ if dol_next == False: # 돌이 체스판 벗어남
+ king.move_back(cmd) # 킹과 돌 원래 자리로 돌아감
+ dol.move_back(cmd)
+ return
+
+
+for i in range(n): # 입력받은 수만큼 킹 이동 함수 반복복
+ moving_cmd = input() # 반복하는 횟수만큼 커맨드 입력받음
+ move_chessman(moving_cmd)
+
+print(king.where(),dol.where())
diff --git "a/03122_Ji/2\354\243\274\354\260\250/study_2week_kimQ_Ji.py" "b/03122_Ji/2\354\243\274\354\260\250/study_2week_kimQ_Ji.py"
new file mode 100644
index 0000000..1e8cfdd
--- /dev/null
+++ "b/03122_Ji/2\354\243\274\354\260\250/study_2week_kimQ_Ji.py"
@@ -0,0 +1,30 @@
+# Q1. 로그인 시에 아이디를 검사하는 함수 check()를 작성해서 테스트하라.
+# check가 한 번 호출 될 때마다 비밀번호를 질문하고 일치여부를 확인한다.
+# 비밀번호는 숫자 1234로 고정되어있다고 가정한다.
+# check가 3번 이상 호출되고 아이디가 일치하지 않으면 check()는 "Account has exceed allowed number of login attempts."메시지를 출력한다.
+
+def check():
+ password = input('password: ')
+ if password == '1234':
+ return True
+ else:
+ return False
+
+for i in range(3): # check 호출 3번 반복
+ result = check()
+ if result: # result == True
+ print('로그인 성공')
+ break
+ elif i==2: # result == False 고 i == 2(3번째 입력일 때)
+ print('Account has exceed allowed number of login attempts.')
+
+
+
+'''
+Result
+
+password: 1000
+password: 1001
+password: 1002
+Account has exceed allowed number of login attempts.
+'''
\ No newline at end of file
diff --git "a/03122_Ji/2\354\243\274\354\260\250/study_week2_Q_jwlee_Ji.py" "b/03122_Ji/2\354\243\274\354\260\250/study_week2_Q_jwlee_Ji.py"
new file mode 100644
index 0000000..830585f
--- /dev/null
+++ "b/03122_Ji/2\354\243\274\354\260\250/study_week2_Q_jwlee_Ji.py"
@@ -0,0 +1,38 @@
+# 문제 설명
+# 양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다.
+# 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다.
+# 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
+
+# 제한 조건
+# x는 1 이상, 10000 이하인 정수입니다.
+
+# 입출력 예
+# x return
+# 10 true
+# 12 true
+# 11 false
+# 13 false
+
+# 입출력 예 설명
+# 입출력 예 #1
+# 10의 모든 자릿수의 합은 1입니다. 10은 1로 나누어 떨어지므로 10은 하샤드 수입니다.
+
+# 입출력 예 #2
+# 12의 모든 자릿수의 합은 3입니다. 12는 3으로 나누어 떨어지므로 12는 하샤드 수입니다.
+
+# 입출력 예 #3
+# 11의 모든 자릿수의 합은 2입니다. 11은 2로 나누어 떨어지지 않으므로 11는 하샤드 수가 아닙니다.
+
+
+# https://school.programmers.co.kr/learn/courses/30/lessons/12947
+
+def solution(x):
+ str_x = str(x)
+ sum = 0
+ for i in str_x:
+ sum += int(i)
+ if x % sum == 0:
+ answer = True
+ else:
+ answer = False
+ return answer
\ No newline at end of file
diff --git "a/03122_Ji/2\354\243\274\354\260\250/\353\254\270\354\240\234/study_week2_A_ji.py" "b/03122_Ji/2\354\243\274\354\260\250/\353\254\270\354\240\234/study_week2_A_ji.py"
new file mode 100644
index 0000000..aaed121
--- /dev/null
+++ "b/03122_Ji/2\354\243\274\354\260\250/\353\254\270\354\240\234/study_week2_A_ji.py"
@@ -0,0 +1,28 @@
+# 문제 설명
+# 문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요.
+# 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
+
+# 제한 사항
+# s는 길이 1 이상, 길이 8 이하인 문자열입니다.
+# s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.
+
+# 입출력 예
+# s return
+# "a234" false
+# "1234" true
+
+def solution(s):
+ if len(s)==4 or len(s)==6:
+ for cha in s:
+ if 48<=ord(cha)<=57:
+ pass
+ else:
+ return False
+ return True
+ else:
+ return False
+
+s = 'a1234'
+print(solution(s))
+
+# if 문 층이 많을수록 안좋다
diff --git "a/03122_Ji/2\354\243\274\354\260\250/\353\254\270\354\240\234/study_week2_Q_ji.py" "b/03122_Ji/2\354\243\274\354\260\250/\353\254\270\354\240\234/study_week2_Q_ji.py"
new file mode 100644
index 0000000..33601f1
--- /dev/null
+++ "b/03122_Ji/2\354\243\274\354\260\250/\353\254\270\354\240\234/study_week2_Q_ji.py"
@@ -0,0 +1,13 @@
+# 문제 설명
+# 문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
+
+# 제한 사항
+# s는 길이 1 이상, 길이 8 이하인 문자열입니다.
+# s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.
+
+# 입출력 예
+# s return
+# "a234" false
+# "1234" true
+
+# https://school.programmers.co.kr/learn/courses/30/lessons/12918
\ No newline at end of file
diff --git "a/03122_Ji/3\354\243\274\354\260\250/QnA_Ji/study_week3_A_Ji.py" "b/03122_Ji/3\354\243\274\354\260\250/QnA_Ji/study_week3_A_Ji.py"
new file mode 100644
index 0000000..1c4b900
--- /dev/null
+++ "b/03122_Ji/3\354\243\274\354\260\250/QnA_Ji/study_week3_A_Ji.py"
@@ -0,0 +1,61 @@
+# 1
+import re
+numbers=['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
+
+def solution(s):
+ for idx, num in enumerate(numbers): # numbers 리스트와 인덱스를 같이 처리(0,1,2,3...)
+ p = re.compile(num) # numbers 요소를 비교로 설정정
+ if p.search(s): # 문자열 처음부터 끝까지 검색해서 존재하면면
+ s= s.replace(num,str(idx)) # 문자열에서 numbers요소 부분을을 그 인덱스를 문자열화 한것으로 대체
+ return int(s) # '숫자'로 대체한한 문자열을 정수형으로 변환하여 반환환
+
+s = 'one4seveneight'
+print(solution(s))
+
+
+# 2.
+from collections import deque
+
+def solution(s):
+ dq = deque(s)
+ count = 0 # 몇 개의 부분으로 분해되었는지 저장하는 변수수
+
+ while dq:
+ if len(dq) == 1: # 문자열이 처음부터 한글자거나, 한글자만 남았을 때
+ count += 1
+
+ x = dq.popleft() # 첫번째 요소를 x에 저장(덱에서 삭제제)
+ count_x = 1 # x 개수를 저장할 변수 초기화 (처음 하나가 있으니 1)
+ count_a = 0 # x와 다른 문자 개수를 저장할 변수 초기화화
+
+ while dq:
+ if x == dq[0]: # 그 다음요소가 x와 같으면면
+ count_x += 1 # x 개수 +1
+ dq.popleft() # 그리고 검사한 요소는 삭제제
+ else:
+ count_a += 1 # 그 다음요소가 x와 다르면면 a에 +1
+ dq.popleft() # 그리고 검사한 요소 삭제
+
+ if count_x == count_a: # 검사 후 x와 다른문자의 개수가 같으면
+ count += 1 # count 변수에 +1 하고 내부 반복문 탈출출
+ break
+ elif len(dq) == 0: # 만약 개수가 다른데 문자열을 다 확인했다면
+ count += 1 # count 변수에 +1 하여 한덩어리임을 저장장
+ return count
+
+print(solution('bbbba'))
+
+
+# 3
+def solution(s):
+ nums = s.split() # 공백을 기준으로 나눠 리스트로 저장장
+ nums = list(map(lambda x: int(x), nums)) # 리스트 내부 문자열숫자를 정수로 변환환
+ max_num = max(nums)
+ min_num = min(nums)
+ result_list = [min_num, max_num] # 최소값, 최대값을 차례대로 결과 리스트에 저장
+ result_list = list(map(lambda x: str(x), result_list)) # 내부 요소를 문자열숫자로 변환
+ result = " ".join(result_list) # 공백을 기준으로 하나의 문자열로 저장
+ return result
+
+s = input('숫자를 입력하세요:')
+print(solution(s))
diff --git "a/03122_Ji/3\354\243\274\354\260\250/QnA_Ji/study_week3_Q_Ji.py" "b/03122_Ji/3\354\243\274\354\260\250/QnA_Ji/study_week3_Q_Ji.py"
new file mode 100644
index 0000000..5c23d3e
--- /dev/null
+++ "b/03122_Ji/3\354\243\274\354\260\250/QnA_Ji/study_week3_Q_Ji.py"
@@ -0,0 +1,110 @@
+'''
+총 3문제
+1. https://school.programmers.co.kr/learn/courses/30/lessons/81301
+2. https://school.programmers.co.kr/learn/courses/30/lessons/140108
+3. https://school.programmers.co.kr/learn/courses/30/lessons/12939
+
+'''
+
+# 1. 문제 설명
+'''네오와 프로도가 숫자놀이를 하고 있습니다.
+네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.
+다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
+
+1478 → "one4seveneight"
+234567 → "23four5six7"
+10203 → "1zerotwozero3"
+
+이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.
+참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다.
+
+숫자 영단어
+0 zero
+1 one
+2 two
+3 three
+4 four
+5 five
+6 six
+7 seven
+8 eight
+9 nine
+
+제한사항
+1 ≤ s의 길이 ≤ 50
+s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.
+return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.
+
+입출력 예
+s result
+"one4seveneight" 1478
+"23four5six7" 234567
+"2three45sixseven" 234567
+"123" 123
+입출력 예 설명
+입출력 예 #1
+
+문제 예시와 같습니다.
+입출력 예 #2
+
+문제 예시와 같습니다.
+입출력 예 #3
+
+"three"는 3, "six"는 6, "seven"은 7에 대응되기 때문에 정답은 입출력 예 #2와 같은 234567이 됩니다.
+입출력 예 #2와 #3과 같이 같은 정답을 가리키는 문자열이 여러 가지가 나올 수 있습니다.
+입출력 예 #4
+
+s에는 영단어로 바뀐 부분이 없습니다.
+
+제한시간 안내
+정확성 테스트 : 10초
+'''
+
+# 2. 문제 설명
+'''
+문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.
+
+- 먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.
+- 이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다.
+ 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다.
+- s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.
+- 만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다.
+
+문자열 s가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를 return 하는 함수 solution을 완성하세요.
+
+제한사항
+1 ≤ s의 길이 ≤ 10,000
+s는 영어 소문자로만 이루어져 있습니다.
+
+입출력 예
+ s result
+"banana" 3
+"abracadabra" 6
+"aaabbaccccabba" 3
+
+입출력 예 설명
+입출력 예 #1
+s="banana"인 경우 ba - na - na와 같이 분해됩니다.
+
+입출력 예 #2
+s="abracadabra"인 경우 ab - ra - ca - da - br - a와 같이 분해됩니다.
+
+입출력 예 #3
+s="aaabbaccccabba"인 경우 aaabbacc - ccab - ba와 같이 분해됩니다.
+'''
+
+# 3. 문제 설명
+'''
+문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다.
+str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요.
+예를들어 s가 "1 2 3 4"라면 "1 4"를 리턴하고, "-1 -2 -3 -4"라면 "-4 -1"을 리턴하면 됩니다.
+
+제한 조건
+s에는 둘 이상의 정수가 공백으로 구분되어 있습니다.
+
+입출력 예
+s return
+"1 2 3 4" "1 4"
+"-1 -2 -3 -4" "-4 -1"
+"-1 -1" "-1 -1"
+'''
\ No newline at end of file
diff --git "a/03122_Ji/3\354\243\274\354\260\250/pythonA_Ji.py" "b/03122_Ji/3\354\243\274\354\260\250/pythonA_Ji.py"
new file mode 100644
index 0000000..a16057b
--- /dev/null
+++ "b/03122_Ji/3\354\243\274\354\260\250/pythonA_Ji.py"
@@ -0,0 +1,92 @@
+# 1
+sum_num = lambda x,y: x+y
+print(sum_num(3,5))
+
+# 2
+numbers = [1, 2, 3, 4]
+squared_numbers = list(map(lambda x: x ** 2,numbers))
+print(squared_numbers)
+
+# 3
+words = ["hello", "world"]
+words_len = list(map(lambda x: len(x), words))
+print(words_len)
+
+# 4
+numbers = [1, 2, 3, 4, 5, 6]
+even = list(filter(lambda x: x % 2 == 0, numbers))
+print(even)
+
+# 5
+from functools import reduce
+numbers = [10, 20, 30, 40]
+max_num = reduce(lambda x,y: x if x>y else y, numbers)
+print(max_num)
+
+# 7
+words = ["banana", "apple", "cherry"]
+print(sorted(words))
+
+# 8
+numbers = [5, 10, 15, 20]
+fn = list(filter(lambda x: x>=10, numbers))
+print(fn)
+
+# 9
+words = ["python", "lambda"]
+cwords = list(map(lambda x: x.upper(), words))
+print(cwords)
+
+# 10
+numbers = [4, 9, 16]
+sr = list(map(lambda x: x ** 0.5, numbers))
+print(sr)
+
+# 11
+words = ["hello", "world"]
+w_words = list(filter(lambda x: 'w' in x, words))
+print(w_words)
+
+# 12
+numbers = [1, 2, 3, 4]
+multi_num = reduce(lambda x,y: x*y, numbers)
+print(multi_num)
+
+# 13
+numbers = [1, 2, 3, 4, 5]
+even = [x**2 for x in numbers if x%2 ==0]
+print(even)
+
+# 14
+list1 = [1, 2, 3]
+list2 = [4, 5, 6]
+hap = list(map(lambda x,y: x+y, list1, list2))
+print(hap)
+
+# 15
+people = [("Alice", 30), ("Bob", 25), ("Charlie", 35)]
+people.sort(key=lambda x:x[1])
+print(people)
+
+# 16
+plus_str = lambda str1,str2: str1+' '+str2
+print(plus_str('hello','world'))
+
+# 17
+numbers = [1, 2, 3, 4, 5, 6]
+even = list(filter(lambda x:x%2==0,numbers))
+sum_even = sum(even)
+print(sum_even)
+
+# 18
+words = ["apple", "banana"]
+fw = list(map(lambda x: x[0], words))
+print(fw)
+
+# 19
+numbers = [1, 2, 3]
+print(list(map(lambda x:str(x),numbers)))
+
+# 20
+words = ["python", "is", "awesome"]
+print(list(filter(lambda x: len(x)>=3, words)))
\ No newline at end of file
diff --git "a/03122_Ji/3\354\243\274\354\260\250/pythonQ.md" "b/03122_Ji/3\354\243\274\354\260\250/pythonQ.md"
new file mode 100644
index 0000000..11367f3
--- /dev/null
+++ "b/03122_Ji/3\354\243\274\354\260\250/pythonQ.md"
@@ -0,0 +1,132 @@
+# Python 기초 심화 문제 모음
+
+아래는 Python의 lambda에 관련된된 20개씩의 문제를 구성하였습니다.
+
+---
+
+## 람다 함수 문제
+
+### 1. 두 숫자를 더하는 람다 함수 작성하기
+```python
+# 입력: (3, 5)
+# 출력: 8
+```
+
+### 2. 리스트의 각 요소를 제곱하는 람다 함수 사용
+```python
+numbers = [1, 2, 3, 4]
+# 출력: [1, 4, 9, 16]
+```
+
+### 3. 문자열 길이를 반환하는 람다 함수 작성
+```python
+words = ["hello", "world"]
+# 출력: [5, 5]
+```
+
+### 4. 짝수 필터링
+```python
+numbers = [1, 2, 3, 4, 5, 6]
+# 출력: [2, 4, 6]
+```
+
+### 5. 리스트의 최대값 찾기
+```python
+numbers = [10, 20, 30, 40]
+# 출력: 40
+```
+
+### 6. 단어를 알파벳 순서로 정렬하기
+```python
+words = ["banana", "apple", "cherry"]
+# 출력: ["apple", "banana", "cherry"]
+```
+
+### 7. 리스트의 요소를 두 배로 만드는 람다 함수
+```python
+numbers = [1, 2, 3]
+# 출력: [2, 4, 6]
+```
+
+### 8. 특정 조건에 따라 값 필터링
+```python
+numbers = [5, 10, 15, 20]
+# 조건: 10 이상인 숫자만
+# 출력: [10, 15, 20]
+```
+
+### 9. 문자열 리스트를 대문자로 변환
+```python
+words = ["python", "lambda"]
+# 출력: ["PYTHON", "LAMBDA"]
+```
+
+### 10. 람다와 map을 사용해 리스트의 제곱근 계산
+```python
+numbers = [4, 9, 16]
+# 출력: [2.0, 3.0, 4.0]
+```
+
+### 11. 리스트 내 특정 단어 포함 여부 확인
+```python
+words = ["hello", "world"]
+# 조건: 'w'가 포함된 단어
+# 출력: ["world"]
+```
+
+### 12. 람다와 reduce를 사용해 리스트의 곱 계산
+```python
+numbers = [1, 2, 3, 4]
+# 출력: 24
+```
+
+### 13. 리스트의 짝수 요소를 제곱
+```python
+numbers = [1, 2, 3, 4, 5]
+# 출력: [4, 16]
+```
+
+### 14. 두 리스트의 합 생성
+```python
+list1 = [1, 2, 3]
+list2 = [4, 5, 6]
+# 출력: [5, 7, 9]
+```
+
+### 15. 이름과 나이를 튜플로 정렬
+```python
+people = [("Alice", 30), ("Bob", 25), ("Charlie", 35)]
+# 나이 순으로 정렬
+# 출력: [("Bob", 25), ("Alice", 30), ("Charlie", 35)]
+```
+
+### 16. 두 문자열을 결합하는 람다 함수 작성
+```python
+# 입력: ("hello", "world")
+# 출력: "hello world"
+```
+
+### 17. 리스트에서 짝수의 합 계산
+```python
+numbers = [1, 2, 3, 4, 5, 6]
+# 출력: 12
+```
+
+### 18. 문자열의 첫 글자를 반환
+```python
+words = ["apple", "banana"]
+# 출력: ["a", "b"]
+```
+
+### 19. 리스트의 요소를 문자열로 변환
+```python
+numbers = [1, 2, 3]
+# 출력: ["1", "2", "3"]
+```
+
+### 20. 특정 길이 이상의 단어 필터링
+```python
+words = ["python", "is", "awesome"]
+# 조건: 길이 3 이상
+# 출력: ["python", "awesome"]
+```
diff --git "a/03122_Ji/3\354\243\274\354\260\250/study_3week_kimA_Ji.py" "b/03122_Ji/3\354\243\274\354\260\250/study_3week_kimA_Ji.py"
new file mode 100644
index 0000000..563c4cb
--- /dev/null
+++ "b/03122_Ji/3\354\243\274\354\260\250/study_3week_kimA_Ji.py"
@@ -0,0 +1,51 @@
+# 음료 주문 프로그램
+
+# menu={'coffee':3500,'latte':4000,'smoothie':5000,'tea':3000}
+
+# 해당 딕셔너리를 활용하여 음료 주문을 하는 GUI프로그램을 생성한다.
+# 창 제목은 음료 주문 프로그램이라고 작성한다.
+# exit버튼을 누르면 터미널에 음료 주문 프로그램을 종료했다는 문구와 함께 프로그램 창을 종료시킨다.
+# 창에는 메뉴판에 있는 메뉴명을 기재하며 각 메뉴 버튼을 누르면 하단에 총 금액과 총 가격에 반영되도록 이벤트를 설정한다.
+from tkinter import Tk
+from tkinter import Button
+from tkinter import Label
+
+menu={'coffee':3500,'latte':4000,'smoothie':5000,'tea':3000}
+menu_list = list(menu.keys())
+sum = 0
+
+def event(key):
+ global sum
+ sum += menu[key]
+
+ olabel3 = Label(otk, text=f'{key}: {menu[key]}원')
+ olabel3.pack()
+ olabel4['text']=f'총 {sum}원'
+
+otk = Tk()
+otk.title('음료 주문 프로그램')
+otk.geometry('300x300+200+200')
+
+exitbotton = Button(otk, text='exit',command=exit)
+exitbotton.pack(side='bottom')
+
+olabel1 = Label(otk, text='