베이직반 수업 11-18
코드카타 문제 풀이
1. 홀짝에 따라 다른 값 반환하기
▼ 문제 : 양의 정수 n이 매개변수로 주어질 때, n이 홀수라면 n 이하의 홀수인 모든 양의 정수의 합을 return하고 n이 짝수라면 n 이하의 짝수인 모든 양의 정수의 제곱의 합을 return 하는 solution 함수를 작성해 주세요.
▼ 풀이
# 풀이 1
def solution(n):
answer = 0
if (n%2==1) : # n이 홀수라면
for i in range(n, 0, -2) : # ex) 7 -> 5 -> 3 -> 1
answer += i
else: # n이 짝수라면
for i in range(n, 0, -2) : # ex ) 10 -> 8 -> ... -> 4 -> 2
answer += (i**2)
return answer
# 풀이 2
def solution(n):
if n%2:
return sum(range(1,n+1,2)) # 시작점에 따라 홀짝을 구분
return sum([i*i for i in range(2,n+1,2)])
# 풀이 3번
def solution(n):
int_list = range(n+1)
if n % 2 == 1: # 홀수일때
return sum(int_list[1::2]) #1부터 시작해서 2씩 건너뛴 요소들 ex) sum(1, 3, 5, 7, ..)
else: # 짝수일때
a = 0
for i in range(len(int_list[0::2])): #0부터 시작해서 2씩 건너뛸때
a += int_list[0::2][i]**2
return a
2. 조건 문자열
▼ 문제 : 문자열에 따라 다음과 같이 두 수의 크기를 비교하려고 합니다.
- 두 수가 n과 m이라면
- ">", "=" : n >= m
- "<", "=" : n <= m
- ">", "!" : n > m
- "<", "!" : n < m
두 문자열 ineq와 eq가 주어집니다. ineq는 "<"와 ">"중 하나고, eq는 "="와 "!"중 하나입니다. 그리고 두 정수 n과 m이 주어질 때, n과 m이 ineq와 eq의 조건에 맞으면 1을 아니면 0을 return하도록 solution 함수를 완성해주세요.
▼ 풀이
# 풀이 1
def solution(ineq, eq, n, m):
answer = 0
if (ineq == '>' and eq == '='):
answer = 1 if n >= m else 0
elif (ineq == '<' and eq == '='):
answer = 1 if n <= m else 0
elif (ineq == '>' and eq == '!'):
answer = 1 if n > m else 0
elif (ineq == '<' and eq == '!'):
answer = 1 if n < m else 0
return answer
# 풀이 2: eval() = 문자열로 된 표현식을 실행하는 함수
def solution(ineq, eq, n, m):
return int(eval(str(n)+ineq+eq.replace('!','')+str(m))) # eval 함수의 결과값이 참이라면 True일 것이고, eval함수의 결과값이 거짓이라면 False일 것
3. 코드 처리하기
▼ 문제 : 문자열 code가 주어집니다.
code를 앞에서부터 읽으면서 만약 문자가 "1"이면 mode를 바꿉니다. mode에 따라 code를 읽어가면서 문자열 ret을 만들어냅니다.
mode는 0과 1이 있으며, idx를 0 부터 code의 길이 - 1 까지 1씩 키워나가면서 code[idx]의 값에 따라 다음과 같이 행동합니다.
- mode가 0일 때
- code[idx]가 "1"이 아니면 idx가 짝수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.
- code[idx]가 "1"이면 mode를 0에서 1로 바꿉니다.
- mode가 1일 때
- code[idx]가 "1"이 아니면 idx가 홀수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.
- code[idx]가 "1"이면 mode를 1에서 0으로 바꿉니다.
문자열 code를 통해 만들어진 문자열 ret를 return 하는 solution 함수를 완성해 주세요.
단, 시작할 때 mode는 0이며, return 하려는 ret가 만약 빈 문자열이라면 대신 "EMPTY"를 return 합니다.
▼ 풀이
# 풀이 1
def solution(code):
result = ''
mode = 0
for i in range(len(code)):
if mode == 0 :
if code[i] != '1' and i % 2 == 0:
result += code[i]
elif code[i] == '1':
mode = 1
else :
if code[i] != '1' and i % 2 == 1 :
result += code[i]
elif code[i] == '1':
mode = 0
if result == '':
return 'EMPTY'
return result
# 플이 2
def solution(code):
return "".join(code.split("1"))[::2] or "EMPTY"
▼ for문 한줄로 리스트 만들기 (리스트 컴프리핸션)
[표현식 for 변수1 in 객체1 if 조건문1
for 변수2 in 객체2 if 조건문2
......
for 변수n in 객체n if 조건문n]
표현식(expression) : 새로운 리스트의 각 항목을 어떻게 변환할지 결정
for 변수 in 반복가능한 객체 : 반복문에서 각 요소를 하나씩 가져옴
if 조건식(선택사항) : 특정 조건을 만족하는 요소만 포함
위와 같이 for 변수 in 객체 if 조건문은 2개 이상으로 구성할 수도 있다. if 조건문은 생략 가능함
▼ 예제
a = 'abcde'
b = [val + 'k' for val in a]
print(b) # ['ak', 'bk', 'ck', 'dk', 'ek']
a = [x**2 for x in range(1, 11) if x % 2 == 0]
print(a) # [4, 16, 36, 64, 100]
a = [x**2 for x in range(1, 6)]
print(a) # [1, 4, 9, 16, 25]
words = ["python", "is", "fun"]
result3 = [word.upper() for word in words]
print(result3) # ['PYTHON', 'IS', 'FUN']
# 이중리스트 flatten 작업. [1,2,3,4,5,6]으로 만들기
nested_list = [[1, 2], [3, 4], [5, 6]]
flat_list = [item for sublist in nested_list for item in sublist]
print(flat_list) # [1, 2, 3, 4, 5, 6]
a1 = [1, 2, 3]
a2 = [6, 7 ,8]
b = [val1 + val2 for val1 in a1 if val1 < 3
for val2 in a2 if val2 < 7]
print(b)
# 출력값 : [7, 8]
# (val1, val2) 순서는 (1,6), (1,7), (1,8), (2,6), (2,7), (2,8), (3,6), (3,7), (3,8) 이며,
# 각 조건문에 따라 (1,6)과 (2,6)만 채택됨
▼ Boolean 자료형
while, if 등은 조건문 안의 내용의 True/False 여부에 따라서 아래 내용을 실행할지를 결정한다.
다양한 자료형
- "python" : True
- "" : False
- [1,2,3] : True
- [] : False
- (1,2,3) : True
- () : False
- 1 : True
- 0 : False
- None : False
- 1==1 : 계산결과 True
- 1 < 3 : 계산결과 True
- 1 > 3 : 계산결과 False
▼ 예제
a = [1,2,3,4,5]
while a : # while (조건문) :
print(a.pop())
# 출력
5
4
3
2
1
리스트 a 가 빈 리스트[]가 될때까지는 while문 조건식이 True이다. 하지만 pop()을 반복하여 리스트 a가 빈리스트가 되면 while문 안의 조건식이 False가 되어 while문이 멈추게된다.
▼ 예제
if [] :
print("True")
else :
print("False")
# 출력
False
if문 조건식에 빈 리스트가 들어가면 False가 되므로 else문이 출력된다.