-
8.7.월요일 코딧 강의 , 프로그래머스 복습TIL( Today I Learned) 2023. 8. 7. 23:29
1,
리스트 제거 방식
리스트의 뒤에서 없앨 때
x 라는 리스트가 있고 x =[[0, 1, 2, 3, 4, 5, 6, 7] 에서
x.pop() for _ in range(제거 횟수 ) == x[: -제거횟수 ]
2,
map() 함수를 다시 공부
3,
프로그래머스 복습 중에 주의할 사항과 그때는 차마 이해 못했던 것들 , 내 오답의 이유 등을 살펴보았다
###### 합성수의 갯수를 알려주는 함수 #######
def solution(n):
def is_composite(num):
count =0
for i in range(1,num+1):
if num%i == 0:
count +=1
return count >=3
count = 0
for i in range(4,n+1):
if is_composite(i):
count += 1
return count
def solution(n):# 합성수의 갯수를 알려주는 함수
def is_composite(num): # 합성수 임을 알려주는 함수 = 약수 3개 이상인 수
count = 0
for i in range(1,num+1):
if num%i == 0:
count += 1
return count >= 3 # 이것이 결정적인 key ? why ? 3개 이상이 약수면 --> 합성수 return a ==> a 조건에 맞다면 참 즉 True를 출력
# 고로 합성수인지 아닌지 구별하는 함수는 만들었다
# 그럼 이제 그 내가 정의한 함수를 쓸 함수를 만들어야 한다.
count = 0
for i in range(4,n+1): #n 까지의 즉 n 포함 하고 그것보다 작은 수 중에서 홥성수의 갯수 를 구하는 함수
if is_composite(i):
count += 1
return count
3…맵함수 map()
def solution(order):
return sum(map(lambda x :str(order).count(str(x)),[3,6,9])) 를 통한 공부
map() 함수는 파이썬에서 사용되는 함수로, 주어진 함수를 반복 가능한 객체(예: 리스트, 튜플 등)의 각 항목에 적용하여 새로운 반복 가능한 객체로 반환하는 역할을 합니다.
map() 함수의 일반적인 문법은 다음과 같습니다:
map(함수, 반복 가능한 객체)
동작 방식은 다음과 같습니다:
- 함수 인자는 반복 가능한 객체(iterable)의 각 요소에 적용할 함수를 지정합니다.
- 반복 가능한 객체는 처리하려는 항목들의 모음입니다.
map() 함수는 iterable의 각 요소에 함수를 적용하고, 그 결과를 새로운 반복 가능한 객체로 반환합니다.
다음은 map() 함수를 사용하는 예제입니다:
# 예제: 리스트의 각 요소를 제곱하기
numbers = [1, 2, 3, 4, 5]
def square(x):
return x**2
squared_numbers = map(square, numbers)
print(list(squared_numbers)) # 출력: [1, 4, 9, 16, 25]이 예제에서는 square() 함수를 정의하여 숫자를 입력받고 해당 숫자의 제곱을 반환하도록 했습니다. 그리고 map() 함수를 사용하여 numbers 리스트의 각 요소에 square() 함수를 적용했습니다. map() 함수는 반복자(iterator)를 반환하므로, 결과를 확인하기 위해 list()를 사용하여 새로운 리스트로 변환했습니다.
map() 함수는 컬렉션 내의 각 요소에 특정 연산 또는 변환을 적용하고, 그 결과를 새로운 반복 가능한 객체로 수집해야 할 때 유용합니다. 파이썬에서 데이터를 처리하는 간결하고 우아한 방법을 제공하는 함수입니다.
#### 가까운 1 찾기 #### - 틀렸던 문제
문제 설명
정수 배열 arr가 주어집니다. 이때 arr의 원소는 1 또는 0입니다. 정수 idx가 주어졌을 때, idx보다 크면서 배열의 값이 1인 가장 작은 인덱스를 찾아서 반환하는 solution 함수를 완성해 주세요.
단, 만약 그러한 인덱스가 없다면 -1을 반환합니다.
제한사항
- 3 ≤ arr의 길이 ≤ 100'000
입출력 예
arr idx result [0, 0, 0, 1] 1 3 [1, 0, 0, 1, 0, 0] 4 -1 [1, 1, 1, 1, 0] 3 3 def solution(arr, idx):
answer = 0
try:
answer = arr.index(1, idx). #——>(찾는거, 시작점)
except:
answer = -1
return answer
- solution' 함수는 입력 정수 배열인 'arr'과 주어진 정수 인덱스인 'idx'라는 두 개의 인수를 입력으로 받습니다.
- 'answer' 변수는 0 값으로 초기화됩니다. 이 변수는 배열에서 주어진 색인 'idx' 다음에 나오는 '1'의 색인을 저장하는 데 사용됩니다.
- 이 코드는 try-except 블록을 사용하여 arr 목록에서 index() 메서드를 사용할 때 발생할 수 있는 예외를 처리합니다. index() 메서드는 목록에서 지정된 요소가 처음 나타나는 인덱스를 반환합니다. 검색할 요소와 검색할 시작 인덱스이것 포함라는 두 개의 인수를 사용합니다.
- 'answer = arr.index(1, idx)' 행은 주어진 색인 'idx'에서 시작하여 목록 'arr'에서 다음에 나타나는 '1'의 색인을 찾으려고 시도합니다. 주어진 인덱스 뒤에 1이 없으면 ValueError 예외가 발생합니다.
- index() 메소드가 다음 1 항목을 성공적으로 찾으면 해당 항목의 인덱스로 answer 변수를 업데이트합니다.
- index() 메서드가 ValueError 예외를 발생시키는 경우(즉, 주어진 인덱스 다음에 1이 발견되지 않음) 코드는 except 블록에 들어가고 answer 변수가 설정됩니다. -1로.
- 마지막으로 이 함수는 배열에서 주어진 idx 포함해서다음에 나타나는 1의 인덱스를 나타내는 answer 값을 반환합니다. 해당 항목이 없으면 -1을 반환합니다.
def solution(arr, idx):
answer = 0
try:
answer = arr.index(1, idx)
except:
answer = -1
return answer
#### 수열과 구간 쿼리 1 ####
- 문제 설명
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다.
queries의 원소는 각각 하나의 query를 나타내며, [s, e] 꼴입니다.
각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 arr[i]에 1을 더합니다.
위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 1 ≤ arr의 길이 ≤ 1,000
- 1 ≤ queries의 길이 ≤ 1,000
입출력 예
arr queries result [0, 1, 2, 3, 4] [[0, 1],[1, 2],[2, 3]] [1, 3, 4, 4, 4] 입출력 예 설명
입출력 예 #1
- 각 쿼리에 따라 arr가 다음과 같이 변합니다.
i queries[i] arr - - [0, 1, 2, 3, 4] 0 [0,1] [1, 2, 2, 3, 4] 1 [1,2] [1, 3, 3, 3, 4] 2 [2,3] [1, 3, 4, 4, 4] • 따라서 [1, 3, 4, 4, 4]를 return 합니다.
@@@@
def process_queries(arr, queries):
for query in queries:
s, e = query
for i in range(s, e + 1):
arr[i] += 1
return arr
다른 사람 풀이
@@@@@@
def solution(arr, queries):
for (s, e) in queries:
arr = [a+1 if s <= i <= e else a for i, a in enumerate(arr)]
return arr
#### 빈 배열에 추가, 삭제하기 ####
문제 설명
아무 원소도 들어있지 않은 빈 배열 X가 있습니다.
길이가 같은 정수 배열 arr과 boolean 배열 flag가 매개변수로 주어질 때, flag를 차례대로 순회하며 flag[i]가 true라면 X의 뒤에 arr[i]를 arr[i] × 2 번 추가하고, flag[i]가 false라면 X에서 마지막 arr[i]개의 원소를 제거한 뒤 X를 return 하는 solution 함수를 작성해 주세요.
제한사항
- 1 ≤ arr의 길이 = flag의 길이 ≤ 100
- arr의 모든 원소는 1 이상 9 이하의 정수입니다.
- 현재 X의 길이보다 더 많은 원소를 빼는 입력은 주어지지 않습니다.
입출력 예
arr flag result [3, 2, 4, 1, 3] [true, false, true, false, false] [3, 3, 3, 3, 4, 4, 4, 4] 입출력 예 설명
입출력 예 #1
- 예제 1번에서 X의 변화를 표로 나타내면 다음과 같습니다
•
따라서 [3, 3, 3, 3, 4, 4, 4, 4]를 return 합니다.• flag[i] • arr[i] • X • • • • [] • 0 • true • 3 • [3, 3, 3, 3, 3, 3] • 1 • false • 2 • [3, 3, 3, 3] • 2 • true • 4 • [3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4] • 3 • false • 1 • [3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4] • 4 • false • 3 • [3, 3, 3, 3, 4, 4, 4, 4] 내 오답
def solution(arr, flag):
x=[]
for i,j in zip(arr,flag): <---- 전에는 enumerate을 썼었다
if j == True:
p =2*i
for _ in range(p):
x.append(i)
else:
for _ in range(i): <------ 쳇은 이 아래에다 if x: 를 넣어야 한덴다. 이유는 리스트 x가 비어있을 수 있기에
x.pop()
return x
쳇것 1
def solution(arr, flag):
X = []
for i in range(len(flag)):
if flag[i]:
X.extend([arr[i]]*(arr[i]*2)
else:
X = X[:-arr[i]]
return X
위 코드에서 X는 빈 배열로 초기화되며, flag를 순회하며 아래와 같이 처리됩니다.
flag[i]가 True인 경우, X의 뒤에 arr[i]*2를 두 번 추가합니다.
flag[i]가 False인 경우, X에서 마지막 arr[i]개의 원소를 제거합니다.
최종적으로 처리된 X를 반환합니다.
def solution(arr, flag):
x = []
for i, f in enumerate(flag):
if f: # If the value in flag is True
x += [arr[i]] * (arr[i] * 2)
else:
for _ in range((arr[i])):
x.pop()
return x
'TIL( Today I Learned)' 카테고리의 다른 글
8.9.수요일 / 아침에 일어나서 도서관 간 날 // 7시 10분 부터 공부 시작 (1) 2023.08.10 8.8.화요일 (0) 2023.08.08 8.6.일요일 (0) 2023.08.06 8.5.토요일 (0) 2023.08.05 8.4.금요일// 프로그래머스 복습과 재도전 & 코딧 강의 (0) 2023.08.04