수열과 구간 쿼리 4
문제설명
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.
각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 i가 k의 배수이면 arr[i]에 1을 더합니다.
위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.
해결방법
def solution(arr, queries):
for query in queries:
s, e, k = query
for i in range(s, e + 1):
if i % k == 0:
arr[i] += 1
return arr
배열만들기 2
문제설명
정수 l과 r이 주어졌을 때, l 이상 r이하의 정수 중에서 숫자 "0"과 "5"로만 이루어진 모든 정수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
만약 그러한 정수가 없다면, -1이 담긴 배열을 return 합니다.
접근방법
- 먼저 '5' 나 '0' 으로만 이루어진 것을 확인하기 위해서 문자열로 바꿔줘야겠다고 생각했다.
- 반복문을 활용해서 하나씩 검사를 하고 sort 로 오름차순 정렬을 해줘야한다.
첫번째 시도
def solution(l, r):
answer = []
for i in range(l, r + 1):
str_i = str(i)
for char in str_i:
if char =='5' or '0':
answer.append(char)
if not answer:
return [-1]
return sorted(answer)
오우 shit ^^
내 코드의 문제점을 말해보자면 먼저
- 조건문: or 로 했기 때문에 조건문이 항상 참이 된다. 특히 or '0' 은 '0' 이 항상 참으로 평가되기 때문에 조건문이 항상 참으로 평가가 된다.
- 우리는 숫자를 answer 에 추가해야하는데 내가 한 코드를 보면 문자 하나의 개별 요소를 answer에 추가하였기 때문에 아주 지저분한 코드가 완성이 됐당 ^^
해결코드
def solution(l, r):
answer=[]
for i in range(l,r+1):
str_i= str(i)
if all(char in '50' for char in str_i):
answer.append(i)
if not answer:
return[-1]
return sorted(answer)
이렇게 하면 모든 반복문을 돌면서 계속해서 all 을 사용하여 '5' 와 '0' 이 들어있는 것을 확인하고
answer에 append 될 것이당
📌 all 과 any
🤔 파이썬 내장함수 all
-반복 가능한 자료형의 모든 요소가 참(True) 이면 참(True) 를 반환하는 함수
-즉 모든 요소 하나하나가 다 True 여야 True 를 반환한다
-반복문이랑 함께 쓰면 반복문의 모든 결과가 참인지 확인한다.
예시
def check(word): check_word = 'hello' answer = all(char in check_word for char in word) return answer
# 테스트 words = ["hello", "my", "hello", "name", "hello","is","hilonghilong"] check(words) # 출력: [True, False, True, False,True,False,False]
🤔 파이썬 내장함수 any
-반복 가능한 자료형의 요소 중 단 하나라도 참(True) 이면 참(True) 를 반환하는 함수
카운트 업
문제설명
정수 start_num와 end_num가 주어질 때, start_num부터 end_num까지의 숫자를 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.
해결코드
def solution(start_num, end_num):
return list(range(start_num, end_num + 1))
콜라츠 수열 만들기
모든 자연수 x에 대해서 현재 값이 x이면 x가 짝수일 때는 2로 나누고, x가 홀수일 때는 3 * x + 1로 바꾸는 계산을 계속해서 반복하면 언젠가는 반드시 x가 1이 되는지 묻는 문제를 콜라츠 문제라고 부릅니다.
그리고 위 과정에서 거쳐간 모든 수를 기록한 수열을 콜라츠 수열이라고 부릅니다.
계산 결과 1,000 보다 작거나 같은 수에 대해서는 전부 언젠가 1에 도달한다는 것이 알려져 있습니다.
임의의 1,000 보다 작거나 같은 양의 정수 n이 주어질 때 초기값이 n인 콜라츠 수열을 return 하는 solution 함수를 완성해 주세요.
접근방법
- 초기값 n 을 넣어야 함
- 1 전까지 반복문이 계속해서 answer 리스트에 들어가면 되겠당
- 반복문을 쓸까? -> 반복문 어떻게쓸까?!
def solution(n):
answer = []
while n != 1:
answer.append(n)
if n % 2 == 0:
n = n // 2
else:
n = 3 * n + 1
answer.append(1)
return answer
초기값 n 이 1이 아니라고 했을 때 n 이 바로 들어가야하니까 n 을 넣어준다.
그리고 계산 과정~.~ 이 while 안에 넣어서 반복해서 들어가도록 해주고
1이 될때까지 while 을 반복하도록 해준당
여기서 잠깐~!!!-!!!
📌 for 반복문과 while 반복문의 차이점은??!
for 반복문
-for 반복문은 반복 횟수가 정해져 있을 때 주로 사용
-이는 리스트, 튜플, 문자열, 범위 등과 같은 이터러블(iterable) 객체의 요소를 순차적으로 반복하거나 특정 범위를 반복할 때 적합
예시# 리스트의 요소를 반복 for element in [1, 2, 3, 4, 5]: print(element) # 범위를 반복 for i in range(5): print(i)
while 반복문
-while 반복문은 반복 횟수가 정해져 있지 않고, 특정 조건이 참일 때까지 계속해서 반복할 때 사용된다.
-조건이 거짓이 되면 반복이 종료한다.
-반복 횟수가 정해져 있지 않거나, 특정 조건이 충족될 때까지 반복해야 할 때 사용된다.
예시# 조건이 참인 동안 반복 count = 0 while count < 5: print(count) count += 1
배열 만들기 4
정수 배열 arr가 주어집니다. arr를 이용해 새로운 배열 stk를 만드려고 합니다.
변수 i를 만들어 초기값을 0으로 설정한 후 i가 arr의 길이보다 작으면 다음 작업을 반복합니다.
- 만약 stk가 빈 배열이라면 arr[i]를 stk에 추가하고 i에 1을 더합니다.
- stk에 원소가 있고, stk의 마지막 원소가 arr[i]보다 작으면 arr[i]를 stk의 뒤에 추가하고 i에 1을 더합니다.
- stk에 원소가 있는데 stk의 마지막 원소가 arr[i]보다 크거나 같으면 stk의 마지막 원소를 stk에서 제거합니다.
위 작업을 마친 후 만들어진 stk를 return 하는 solution 함수를 완성해 주세요.
접근방법
- 정수 배열 arr를 입력받기
- i가 arr의 길이보다 작으면 ?!?!?1:
- stk가 빈 배열이면 arr[i]를 stk에 추가하고 i에 1을 더한다.
- stk에 원소가 있고 stk의 마지막 원소가 arr[i]보다 작으면 arr[i]를 stk의 뒤에 추가하고 i에 1을 더한다.
- stk에 원소가 있는데 stk의 마지막 원소가 arr[i]보다 크거나 같으면 stk의 마지막 원소를 없애줘야한당
def solution(arr):
stk = []
i = 0
while i < len(arr):
if not stk:
stk.append(arr[i])
i += 1
elif stk[-1] < arr[i]:
stk.append(arr[i])
i += 1
else:
stk.pop()
return stk
📌 파이썬 내장함수 pop 이란?
-리스트의 마지막 요소를 제거하고 그 값을 반환한다.
-pop 메서드는 기본적으로 인덱스를 지정하지 않으면 리스트의 마지막 요소를 제거하지만,
-인덱스를 지정하면 해당 위치의 요소를 제거할 수도 있다.
예시코드
1. 마지막 요소 제거
hilonghilong = [1, 2, 3, 4, 5] last_hilong = hilonghilong.pop() print(last_hilong) # 출력: 5 print(hilonghilong) # 출력: [1, 2, 3, 4]
2. 특정 인덱스를 지정하여 해당 위치의 요소 제거
hilong = [1, 2, 3, 4, 5] hi = hilong.pop(2) print(hi) # 출력: 3 print(hilong) # 출력: [1, 2, 4, 5]
'Algorithm' 카테고리의 다른 글
[Python] 프로그래머스 트레이닝 챌린지 D9 (0) | 2024.07.26 |
---|---|
[Python] 프로그래머스 트레이닝 챌린지 D8 (8) | 2024.07.24 |
[Python] 프로그래머스 트레이닝 챌린지 D6 (7) | 2024.07.22 |
[Python] 프로그래머스 트레이닝 챌린지 D5 (0) | 2024.07.21 |
[Python] 프로그래머스 트레이닝 챌린지 D4 (0) | 2024.07.18 |