https://school.programmers.co.kr/learn/courses/30/lessons/178870
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나만의 풀이 방법)
- 왼쪽 인덱스 left 와 오른쪽 인덱스 right 지점을 정한다.
- left부터 right 구간에 속한 값들을 모두 더한 것이 sum이다.
- 만약 sum이 k보다 작다면 right 값을 1증가시키고 sequence[right] 를 sum에 더해준다.
이유: 구간의 합이 k보다 적기 때문에 다음 인덱스값을 더함
*이때 right값이 sequence배열의 갯수 보다 크면 out of range 에러가 나기 때문에 구간설정해줌
-> 더 이상 right값을 늘리기 어려울때 left를 증가시켜 while문을 종료시킬 수 있도록 하였음 (left가 증가하지 않아 무한반복)
- 반대로 sum이 k보다 크다면 sequence[left] 값을 먼저 빼주고 left를 1증가시켜주었음
(이때 while문에 조건으로 left값은 sequence의 개수 -2 이므로 따로 처리하지 않음)
- left나 right를 조정하여 sum이 k와 같을 경우
- 반환할 result의 값이 비어있다면 [left,right] 값을 반환하도록 하였음
- result가 값을 가지고 있을 경우
- result의 인덱스 차이와 left, right 인덱스 차이를 비교하여 left,right 거리가 더 적으면 result를 갱신하도록함
- right 값을 1증가시키고 sequence[right] 를 sum에 더해줘 다음 반복문에서 left 인덱스를 조절할 수 있도록 함
import Foundation
func solution(_ sequence:[Int], _ k:Int) -> [Int] {
var left = 0
var right = 0
var sum = sequence[left]
var result = [Int]()
while left < sequence.count-1{
if k < sum{
sum -= sequence[left]
left += 1
}
else if k > sum{
if right < sequence.count-1{
right += 1
sum += sequence[right]
}else{
sum -= sequence[left]
left += 1
}
}
if k == sum {
if result.isEmpty{
result = [left,right]
}
else{
if result[1] - result[0] > right - left{
result = [left,right]
}else{
sum -= sequence[left]
left += 1
}
}
if right < sequence.count-1{
right += 1
sum += sequence[right]
}
}
}
return result
}
'Swift랑 친해지기 > programmers 풀기' 카테고리의 다른 글
[프로그래머스] 대충 만든 자판 (Swift) (0) | 2023.10.30 |
---|---|
[프로그래머스] 뒤에 있는 큰 수 찾기 (Swift) (1) | 2023.10.12 |
[프로그래머스] N개의 최소공배수 (Swift) (0) | 2023.09.05 |
[프로그래머스] 최댓값과 최솟값 (Swift) (0) | 2023.07.24 |
[프로그래머스] 타겟넘버 (Swift) ※1,2번 실행초과 (0) | 2023.07.12 |