-
8.13.일요일TIL( Today I Learned) 2023. 8. 13. 22:27
코딧 강의 20개와 프로그래머스 문제 4문제 복습
- 1. 컨트롤 제트
문제 설명
숫자와 "Z"가 공백으로 구분되어 담긴 문자열이 주어집니다. 문자열에 있는 숫자를 차례대로 더하려고 합니다.
이 때 "Z"가 나오면 바로 전에 더했던 숫자를 뺀다는 뜻입니다.
숫자와 "Z"로 이루어진 문자열 s가 주어질 때, 머쓱이가 구한 값을 return 하도록 solution 함수를 완성해보세요.
제한사항
- 1 ≤ s의 길이 ≤ 200
- -1,000 < s의 원소 중 숫자 < 1,000
- s는 숫자, "Z", 공백으로 이루어져 있습니다.
- s에 있는 숫자와 "Z"는 서로 공백으로 구분됩니다.
- 연속된 공백은 주어지지 않습니다.
- 0을 제외하고는 0으로 시작하는 숫자는 없습니다.
- s는 "Z"로 시작하지 않습니다.
- s의 시작과 끝에는 공백이 없습니다.
- "Z"가 연속해서 나오는 경우는 없습니다.
입출력 예
s result "1 2 Z 3" 4 "10 20 30 40" 100 "10 Z 20 Z 1" 1 "10 Z 20 Z" 0 "-1 -2 -3 Z" -3 입출력 예 설명
입출력 예 #1
- 본문과 동일합니다.
입출력 예 #2
- 10 + 20 + 30 + 40 = 100을 return 합니다.
입출력 예 #3
- "10 Z 20 Z 1"에서 10 다음 Z, 20 다음 Z로 10, 20이 지워지고 1만 더하여 1을 return 합니다.
이전에 급하게 푼거
def solution(s):
s_list = s.split() # 문자열을 공백을 기준으로 분리하여 리스트로 만듦
result = 0 # 머쓱이가 구한 값
prev_num = 0 # 이전에 더한 숫자
for elem in s_list:
if elem == "Z":
result -= prev_num # 이전에 더한 숫자를 빼줌
else:
num = int(elem)
result += num # 숫자를 더해줌
prev_num = num # 이전에 더한 숫자를 갱신
return result # 머쓱이가 구한 값을 반환
이번에 다시 푼거
def solution(s):
s1 = list(s)
sls =[]
for i in s:
if i.isdigit():
sls.append(int(i))
elif i == "Z":
sls.pop()
return sum(sls)
너무 가슴아프다
풀수 있는건데
한끝차이다
def solution(s):
numbers = s.split()
stack = []
for num in numbers:
if num == "Z":
stack.pop()
else:
stack.append(int(num))
return sum(stack)
나의 빛나는 오류들
def solution(s):
a3 =[]
a1 = s.replace(" ",' ').split()
if "Z" in s:
inx = a1.index("Z")
a2 = a1[:inx-1]+ a1[inx+1:]
for i in a2:
a3.append(int(i))
else:
for i in a1:
a3.append(int(i))
return sum(a3)
def solution(s):
answer = 0
for i in range(len(s := s.split(" "))):
answer += int(s[i]) if s[i] != "Z" else -int(s[i-1])
return answer
문자열 슬라이싱으로 도전해본다
a2 = a1[:inx-1]+ a1[inx+1:] ??????
이런 스타일로
해서 했다.
def solution(s):s1 = s.split()s2 =[]for i in s1:if i == "Z":s2[s1.index("Z")-1] = 0else:s2.append(int(i))return (sum(s2))- 2. 리스트 자르기
-
문제 설명
정수 n과
정수 3개가 담긴 리스트 slicer
그리고 정수 여러 개가 담긴 리스트 num_list가
주어집니다.
slicer에 담긴 정수를 차례대로 a, b, c라고 할 때,
n에 따라 다음과 같이 num_list를 슬라이싱 하려고 합니다.
- n = 1 : num_list의 0번 인덱스부터 b번 인덱스까지
- n = 2 : num_list의 a번 인덱스부터 마지막 인덱스까지
- n = 3 : num_list의 a번 인덱스부터 b번 인덱스까지
- n = 4 : num_list의 a번 인덱스부터 b번 인덱스까지 c 간격으로
올바르게 슬라이싱한 리스트를 return하도록 solution 함수를 완성해주세요.
제한사항
- n 은 1, 2, 3, 4 중 하나입니다.
- slicer의 길이 = 3
- slicer에 담긴 정수를 차례대로 a, b, c라고 할 때
- 5 ≤ num_list의 길이 ≤ 30
- 0 ≤ num_list의 원소 ≤ 100
입출력 예
n slicer num_list result 3 [1, 5, 2] [1, 2, 3, 4, 5, 6, 7, 8, 9] [2, 3, 4, 5, 6] 4 [1, 5, 2] [1, 2, 3, 4, 5, 6, 7, 8, 9] [2, 4, 6] 입출력 예 설명
입출력
예 #1
- [1, 2, 3, 4, 5, 6, 7, 8, 9]에서 1번 인덱스부터 5번 인덱스까지 자른 리스트는 [2, 3, 4, 5, 6]입니다.
입출력
예 #2
- [1, 2, 3, 4, 5, 6, 7, 8, 9]에서 1번 인덱스부터 5번 인덱스까지 2개 간격으로 자른 리스트는 [2, 4, 6]입니다.
def solution(n, slicer, num_list):
a, b, c = slicer
return [num_list[:b + 1], num_list[a:], num_list[a:b + 1], num_list[a:b + 1:c]][n - 1]
내가 한거
def solution(n, slicer, num_list):
result =[]
a, b, c = slicer
if n==1:
result = num_list[:b+1]
elif n==2:
result = num_list[a:]
elif n==3:
result = num_list[a:b+1]
else:
result = num_list[a:b+1:c]
return result
- 7의 개수
-
문제 설명
머쓱이는 행운의 숫자 7을 가장 좋아합니다.
정수 배열 array가 매개변수로 주어질 때,
7이 총 몇 개 있는지 return 하도록 solution 함수를 완성해보세요.
제한사항
- 1 ≤ array의 길이 ≤ 100
- 0 ≤ array의 원소 ≤ 100,000
입출력 예
array result [7, 77, 17] 4 [10, 29] 0 입출력 예 설명
입출력 예 #1
- [7, 77, 17]에는 7이 4개 있으므로 4를 return 합니다.
입출력 예 #2
- [10, 29]에는 7이 없으므로 0을 return 합니다.
내거
def solution(array):
count = 0
for i in array:
count += str(i).count("7")
return count
남의거
def solution(array):
return str(array).count('7')
def solution(array):
return ''.join(map(str, array)).count('7')
def solution(array):
answer = sum([str(i).count("7") for i in array])
return answer
- 소인수분해
문제 설명
소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다.
예를 들어 12를 소인수 분해하면 2 * 2 * 3 으로 나타낼 수 있습니다.
따라서 12의 소인수는 2와 3입니다.
자연수 n이 매개변수로 주어질 때
n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 2 ≤ n ≤ 10,000
입출력 예
n result 12 [2, 3] 17 [17] 420 [2, 3, 5, 7] 입출력 예 설명
입출력 예 #1
- 12를 소인수분해하면 2 * 2 * 3 입니다. 따라서 [2, 3]을 return합니다.
입출력 예 #2
- 17은 소수입니다. 따라서 [17]을 return 해야 합니다.
입출력 예 #3
- 420을 소인수분해하면 2 * 2 * 3 * 5 * 7 입니다. 따라서 [2, 3, 5, 7]을 return합니다.
def solution(n):
prime_factors = set()
divisor = 2
while n > 1:
if n % divisor == 0:
prime_factors.add(divisor)
n = n // divisor
else:
divisor += 1
return sorted(list(prime_factors))
def solution(n):
answer = []
d = 2
while d <= n:
if n % d == 0:
n /= d
if d not in answer:
answer.append(d)
else:
d += 1
return answer
Data 다루기
12. DataFrame 인덱싱 문법 정리
이름으로 인덱싱하기 기본 형태 단축 형태 하나의 row 이름 df.loc["row4"] row 이름의 리스트 df.loc[["row4", "row5", "row3"]] row 이름의 리스트 슬라이싱 df.loc["row2":"row5"] df["row2":"row5"] 하나의 column 이름 df.loc[:, "col1"] df["col1"] column 이름의 리스트 df.loc[:, ["col4", "col6", "col3"]] df[["col4", "col6", "col3"]] column 이름의 리스트 슬라이싱 df.loc[:, "col2":"col5"] 위치로 인덱싱하기 기본 형태 단축 형태 하나의 row 위치 df.iloc[8] row 위치의 리스트 df.iloc[[4, 5, 3]] row 위치의 리스트 슬라이싱 df.iloc[2:5] df[2:5] 하나의 column 위치 df.iloc[:, 3] column 위치의 리스트 df.iloc[:, [3, 5, 6]] column 위치의 리스트 슬라이싱 df.iloc[:, 3:7] 'TIL( Today I Learned)' 카테고리의 다른 글
8.26. 프로그래머스 에서 배우는 파이썬 문법 : if not x: (0) 2023.08.26 8.14.월요일 (0) 2023.08.14 8.12.토요일 잭팟스터디, 문제 풀이 & 미니강의 (1) 2023.08.12 8.11.금요일 (0) 2023.08.11 8.10.목요일 코딧 강의 & 프로그래머스 문제 복습 (1) 2023.08.10