안녕하세요 선생님, 질문이 있습니다.
function solution(target, arr) {
let [count, left, right, sum] = [0, 0, 0, arr[0]];
while (left < arr.length) {
if (sum < target) {
if (right === arr.length - 1) break;
sum += arr[++right];
} else if (sum > target) {
sum -= arr[left++];
} else if (sum === target) {
count++;
if (right === arr.length - 1) break;
sum = sum + arr[++right] - arr[left++];
}
}
return count;
}
let a = [1, 2, 1, 3, 1, 1, 1, 2];
console.log(solution(6, a));
저는 위와 같이 코드를 짜보았는데요,
(문제에서 주어진 파라미터 m을 target이라고 바꿔서 썼습니다)
1. 문제에서 주어진 배열 원소의 범위가 '1~1000 사이의 자연수 ' 이기 때문에 target === sum 인 경우에 left와 right를 동시에 증가시켜줘도 된다고 판단했습니다. 이렇게 생각해도 될까요??
2. 선생님의 풀이에서 m=3, arr = [1, 1, 3, 1, 2] 인 경우에
lt가 rt를 넘어가는 부분이 생기는데 괜찮은 건가요??
lt === 2, rt === 2가 되고 나서 14번 라인에서 lt가 먼저 3이 되고 곧바로 다음 for문이 실행되면서 rt가 3이 됩니다.
답변 1
0
안녕하세요^^
1. 네. 문제없는 코드입니다.
2. 네. 상관없습니다. lt와 rt를 크기 비교할 일이 없이 rt는 증가하면서 sum에 더하는 일을 하면 되고, lt는 증가하면서 sum에서 빼는 일을 하면 됩니다. sum이 음수로 갈 일을 없으니 상관없습니다.
이론 설명처럼 rt가 증가하고 lt가 따라가는 것처럼 코드를 짜려면 아래처럼 하는게 더 이해하기 좋은 코드 같네요.
continue를 사용하는 이유
0
102
2
정렬 가능 여부 판단하기
0
81
2
알고리즘 학습법 관련해서 질문드립니다.
0
96
1
코드 리뷰 부탁드립니다!
0
107
1
indexOf를 사용해서 풀어보았습니다 !!
0
76
1
저는 이런식으로 구현 해보았습니다 !!
0
69
1
12,13,14 강의 소리만 나오고 검은 화면입니다
0
110
3
반복문 최소화하고 indexOf 사용해서 풀어봤습니다
0
74
1
영상 보기 전에 직접 풀어봤습니다.
0
79
1
섹션1의 17번문제 이 풀이로 풀어도 될까요?
0
144
2
정규표현식으로 처리해도 상관없나요 ?
0
128
2
3칸씩 건너뛸 수 있을 경우
0
133
2
강의에 대해 질문있습니다.
0
144
2
Object와 Set을 이용해 풀어봤습니다.
0
129
2
이렇게 해도 되나요?
0
109
2
선생님 중복 단어나 중복관련 문제들은 set을 이용하면 좋을것 같습니다.
0
149
2
이렇게 풀어도 괜찮을까요?
0
146
1
이렇게 풀어도 괜찮을까요?
0
125
1
모든 아나그램 찾기에서 시간복잡도
0
106
1
코드리뷰 부탁드립니다.
0
140
1
for loop 탈출은 return 문으로 해도 되지 않나요?
0
136
1
투포인트알고리즘으로 풀어봤습니다.
0
148
0
코드 리뷰 부탁드립니다.
0
121
1
코드 맞게 작성한 거 아닌가여??
0
150
1





