프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
- 배열 array 주어졌을 떄, i번째 숫자부터 j번째 숫자까지 자른 후, 자른 배열에서 k번째 수를 구함
- [i,j,k]는 2차원 배열인 commands의 원소로 주어짐 (ex : commands = [[i1,j1,k1], [i2,j2,k2]])
- 구한 k번째 수를 정답 배열에 넣어 반환
내 코드
def solution(array, commands):
answer = []
li1 = []
for x in range(len(commands)):
i = commands[x][0]
j = commands[x][1]
k = commands[x][2]
li1 = array[i-1:j]
li1 = sorted(li1)
ans = li1[k-1]
answer.append(ans)
return answer
코드 풀이
- commands를 for문으로 순회 : commands[x]를 이용해 2차원 배열에서 [i,j,k]로 이뤄진 1차원 리스트 추출
- 추출한 1차원 리스트에서 i, j, k원소 뽑아내기
- i,j로 array 리스트 슬라이싱 - 여기서 'n번째'는 0부터 시작하는 리스트의 인덱스 수와 1이 차이나니 주의
- k번째 요소도 위와 마찬가지로, 인덱스 수와 1이 차이남 (ex: [A,B,C,D]에서 3번째는 C이고, C의 인덱스는 2)
- 이를 정답 배열에 append
다른사람 효율적인 풀이
- lambda, map 함수 사용
- commands의 원소 x에서 바로 x[0], x[1], x[2]로 i, j, k를 지정해 array 슬라이싱
- list로 묶어 반환
lambda - map함수 예시
map(lambda 매개변수: 반환값, iterable)
iterable - 문자열, 리스트, 튜플, range와 같은 순회 가능한 값
즉, 실제 사례를 살펴보면 다음과 같다.
list(map(lambda x: <x를 이용한 연산>, <반복 가능한 자료>))
nums = [1, 2, 3, 4]
doubled = list(map(lambda x: x * 2, nums))
print(doubled) # 출력: [2, 4, 6, 8]
'알고리즘' 카테고리의 다른 글
[프로그래머스 알고리즘 고득점 KIT] STACK & QUEUE : 올바른 괄호 (0) | 2025.04.22 |
---|