1. K번째 수
문제 설명
배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.
예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면
- array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
- 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
- 2에서 나온 배열의 3번째 숫자는 5입니다.
배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.
나의 풀이
def solution(array, commands):
li = []
for c in commands:
li.append(sorted(array[c[0]-1:c[1]])[c[2]-1])
return li
commands의 값을 for 문을 통해 가져오고, 요구사항대로 array의 특정 범위의 값을 정렬하여 특정 인덱스의 값만 가진 리스트를 출력하도록 하였다.
다른사람 풀이 + 개선점
for i,j,k in commands:
print(i,j,k)
위 처럼 작성하여 굳이 c[0] , c[1]로 구할 필요없이 각각의 숫자를 i,j,k에 할당하여 간결하게 만들 수 있다.
2. 행렬의 덧셈
문제 설명
행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.
나의 풀이
def solution(arr1, arr2):
for i in range(len(arr1)):
for j in range(len(arr1[0])):
arr1[i][j] += arr2[i][j]
return arr1
for문을 통해 arr1의 행렬의 값에 arr2의 값을 더하여 return하였다.
다른사람 풀이 + 개선점
def sumMatrix(A,B):
answer = [[c + d for c, d in zip(a,b)] for a, b in zip(A,B)]
return answer
zip을 사용하여 간결하게 두 행렬의 값을 for문으로 구할 수 있다.
3. 3진법 뒤집기
문제 설명
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
다른사람 풀이 + 개선점
def solution(n):
result = ''
while n > 0:
result += str(n%3)
n = n//3
return int(result, 3)
3진법으로 while문을통해 변경한다. 이때 순서가 이미 반대로 구해진다.
int( 문자열 , 3) 을 통해 3진법으로 되어있는 result를 10진법으로 출력한다.
4. 크기가 작은 부분 문자열
문제 설명
숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요.
예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다
나의 풀이
def solution(t, p):
cnt = 0
for i in range(len(t)-len(p)+1):
if t[i:i+len(p)] <= p:
cnt +=1
return cnt
for문을 통해 0부터 t의 길이- p의 길이 만큼까지 순서대로 반환하고, p의 길이만큼의 부분문자열을 구하여 p의 값과 비교하여 작거나 같은 경우에만 cnt에 1을 더하도록 하였다.
5. 이상한 문자 만들기
문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
나의 풀이
def solution(s):
a = s.split(' ')
for i , j in enumerate(a) :
word = ''
for k in range(len(j)):
if k%2 == 0:
word += a[i][k].upper()
else:
word += a[i][k].lower()
a[i] = word
return ' '.join(a)
우선 s 문자열을 띄어쓰기 단위로 단어로 나누어 a라는 리스트에 넣는다.
a 리스트의 단어들을 하나씩 빼오며 각각 단어의 인덱스에따라 짝수 , 홀수 구분 및 대소문자 반환하여 word라는 문자열로 만들어 a 리스트의 기존 단어를 변경한다.
이러한 새로 생성된 단어들을 가진 a 리스트를 공백을 포함하여 문자열로 합쳐 반환하였다.
'프로그래머스' 카테고리의 다른 글
[프로그래머스] Python Lv.1 2016년 외 5문제 (6) | 2024.11.05 |
---|---|
[프로그래머스] Python Lv.1 최대공약수와 최소공배수 외 5문제 (2) | 2024.10.30 |
[프로그래머스] Python Lv.1 부족한 금액 계산하기 외 5문제 (4) | 2024.09.30 |
[프로그래머스] Python Lv.1 나누어 떨어지는 숫자 배열 외 4문제 (2) | 2024.09.11 |
[프로그래머스] MySQL Level1 경기도에 위치하는 식품창고 목록 출력하기 ,물고기 문제 (Level1~3) (2) | 2024.09.05 |