728x90
반응형
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제 설명
2. 풀이과정
해당 문제는 합을 만족시키는 부분 수열을 모두 구하고 부분 수열 중 가장 길이가 짧은 부분 수열, 길이가 동일하다면 가장 앞쪽 부분 수열을 찾는 문제이다.
배열에서 원소를 하나씩 추가시키며 합을 확인한다.
합이 아직 작을 경우 뒤 원소를 하나 추가시키고 클 경우 앞 원소를 하나 줄이며 부분 수열을 지정한다.
만약 합이 일치할 경우 해당 부분 수열의 시작 인덱스와 끝 인덱스를 저장하고 앞 원소를 하나 줄인다.
가장 길이가 짧은 부분 수열을 찾아야 하므로 두 인덱스 사이의 차가 작은 순서대로 정렬하면 제일 앞부분 수열이 가장 길이가 짧고 가장 앞쪽 부분 수열이 된다.
- 부분 수열의 시작과 끝 인덱스를 저장할 리스트를 생성한다. li = list()
- 부분 수열의 시작 인덱스를 저장할 변수를 생성하고 초기화한다. start = 0
- 부분 수열의 끝 인덱스를 저장할 변수를 생성하고 초기화한다. end = 0
- 부분 수열의 합을 저장할 변수를 생성하고 처음 부분 수열의 시작 값을 저장한다. result = sequence[end]
- 시작 인덱스와 끝 인덱스가 모두 정수 배열의 원소를 가리킬 수 있으면 반복한다. while (start < len(sequence)) and (end < len(sequence))
- 만약 부분 수열의 합이 아직 작을 경우 if (result < k)
- 끝 인덱스를 증가시켜 end += 1
- 만약 증가시킨 끝 인덱스에 해당하는 원소가 있으면 if (end < len(sequence))
- 부분 수열에 원소를 하나 추가한다. result += sequence[end]
- 반면에 부분 수열의 합이 일치하거나 클 경우 else
- 만약 일치한다면 if (result == k)
- 부분 수열의 시작 인덱스와 끝 인덱스를 리스트로 추가한다. li.append([start, end])
- 부분 수열에 원소를 하나 제거하고 result -= sequence[start]
- 시작 인덱스를 증가시킨다. start += 1
- 모든 가능한 부분 수열을 찾았다면 길이가 가장 짧은 부분 수열을 찾아야 하므로 시작 인덱스와 끝 인덱스의 차이가 작은 순서대로 정렬한다. li.sort(key = lambda x : x[1] - x[0])
- 길이가 가장 짧은 부분 수열의 시작 인덱스와 끝 인덱스를 저장한다. answer = li[0]
반응형
3. 소스코드
def solution(sequence, k):
answer = []
li = list()
start = 0
end = 0
result = sequence[end]
while (start < len(sequence)) and (end < len(sequence)):
if (result < k):
end += 1
if (end < len(sequence)):
result += sequence[end]
else:
if (result == k):
li.append([start, end])
result -= sequence[start]
start += 1
li.sort(key = lambda x : x[1] - x[0])
answer = li[0]
return answer
728x90
반응형
'프로그래머스 > Python' 카테고리의 다른 글
[프로그래머스] 메뉴 리뉴얼 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.11.07 |
---|---|
[프로그래머스] 불량 사용자 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.11.04 |
[프로그래머스] 스티커 모으기(2) - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.11.01 |
[프로그래머스] 124 나라의 숫자 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.30 |
[프로그래머스] 두 큐 합 같게 만들기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.26 |
[프로그래머스] 큰 수 만들기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.24 |
[프로그래머스] 삼각 달팽이 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.22 |
[프로그래머스] 베스트앨범 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.20 |