728x90
[프로그래머스][Python][Lv0] 코딩 기초 트레이닝 (2)
이어서 진행
https://heywantodo.tistory.com/157
1. 빈 배열에 추가, 삭제하기
아무 원소도 들어있지 않은 빈 배열 X가 있습니다. 길이가 같은 정수 배열 arr과 boolean 배열
flag가 매개변수로 주어질 때, flag를 차례대로 순회하며 flag[i]가 true라면 X의 뒤에 arr[i]를
arr[i] × 2 번 추가하고, flag[i]가 false라면 X에서 마지막 arr[i]개의 원소를 제거한 뒤 X를 return 하는 solution 함수를 작성해 주세요.
def solution(arr, flag):
X = []
for i, f in enumerate(flag):
print(i, f)
if f:
X += [arr[i]] * (arr[i]*2)
else:
for _ in range(arr[i]):
X.pop()
return X
💡pop()
default가 -1로 List의 맨 마지막 요소부터 제거한다.
값을 지정해주면 지정된 위치의 요소를 제거한다.
2. 수열과 구간 쿼리
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [i, j] 꼴입니다. 각 query마다 순서대로 arr[i]의 값과 arr[j]의 값을 서로 바꿉니다.
위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.
def solution(arr, queries):
for x,y in queries:
arr[x], arr[y] = arr[y], arr[x]
return arr
💡 배열의 순서 바꾸기
arr[x], arr[y] = arr[y], arr[x]
3. 문자열 뒤집기
문자열 my_string과 정수 s, e가 매개변수로 주어질 때,
my_string에서 인덱스 s부터 인덱스 e까지를 뒤집은 문자열을 return 하는 solution 함수를 작성해 주세요.
def solution(my_string, s, e):
return my_string[:s]+my_string[s:e+1][::-1]+my_string[e+1:]
💡 인덱스 뒤집기
str[::-1]
s 까지의 문자([:s]) + s부터 e까지 뒤집은 문자 ([s:e+1][::-1]) + e 이후의 문자 ([e+1:])
4. 1로 만들기
정수가 있을 때, 짝수라면 반으로 나누고, 홀수라면 1을 뺀 뒤 반으로 나누면, 마지막엔 1이 됩니다. 예를 들어 10이 있다면 다음과 같은 과정으로 1이 됩니다.
10 / 2 = 5
(5 - 1) / 2 = 2
2 / 2 = 1
위와 같이 3번의 나누기 연산으로 1이 되었습니다.
정수들이 담긴 리스트 num_list가 주어질 때, num_list의 모든 원소를 1로 만들기 위해서
필요한 나누기 연산의 횟수를 return하도록 solution 함수를 완성해주세요.
4-1.
def solution(num_list):
answer = 0
for n in num_list:
while n != 1:
n //= 2
answer += 1
return answer
4-2.
def solution(num_list):
return sum(len(bin(i)) - 3 for i in num_list)
예를 들어 i=12 일때, bin(i) 를 하면 '0b1100' 이 됩니다.
여기서 우리는 마지막으로 남겨야 하는 1; 즉 2^0인 맨끝의 '0'과 과 이진수를 나타내는 앞의 '0b' 총 길이 3을 제외한
나머지 숫자들인 "110" 을 없애는 것이 목표값이 되는데,
이는 각 자리마다 2를 나누는 횟수기 때문에 "110"의 길이인 3이 됩니다. 홀 수 일 때는
어차피 -1을 해서 짝수로 만들기 때문에 가능합니다.
5. 문자열이 몇 번 등장하는지 세기
문자열 myString과 pat이 주어집니다.
myString에서 pat이 등장하는 횟수를 return 하는 solution 함수를 완성해 주세요.
def solution(myString, pat):
start = 0
cnt = 0
while True:
idx = myString.find(pat, start)
if idx == -1:
break
cnt += 1
start = idx + 1
return cnt
6. 배열의 길이를 2의 거듭제곱으로 만들기
def solution(arr):
if (len(arr)&(len(arr)-1)) == 0:
return arr
else:
while True:
arr.append(0)
if (len(arr)&(len(arr)-1)) == 0:
break;
return arr
💡 2의 거듭제곱인지 판단할 수 있는 방법
2의 제곱은 비트로 나타낼 때, 맨 왼쪽 비트만 1
n이 2의 제곱이라면 n-1은 맨 왼쪽 비트가 0이고 오른쪽 비트들은 모두 1
따라서 n이 2의 거듭제곱이라면 and 연산을 했을 때 0이 나옴
(n&(n-1)) == 0
7. 수열과 구간 쿼리 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 x, y, z in queries:
for i in range(len(arr)):
if x <= i <= y and i%z == 0:
arr[i] += 1
return arr
반응형
'🧾 Codetest > 프로그래머스' 카테고리의 다른 글
[프로그래머스][Python][Lv0] 코딩테스트 입문 (1) (0) | 2023.09.02 |
---|---|
[프로그래머스][Python][Lv0] 코딩 기초 트레이닝 (3) (1) | 2023.08.28 |
[프로그래머스][Python][Lv0] 코딩 기초 트레이닝 (1) (0) | 2023.07.27 |
[SQL] 코딩 테스트 연습 (3) (0) | 2023.06.26 |
[SQL] 코딩 테스트 연습 (2) (0) | 2023.06.24 |