코드 리뷰 부탁드립니다 :)
486
작성자 없음
작성한 질문수 0
안녕하세요 선생님 😀
강의 잘 보고 있습니다.
저는 count 변수를 두고 값을 저장하고 i값을 변경하여 사용하였는데 이렇게 작성해도 되는지 궁금하여 질문을 올리게 되었습니다. 또 아래와 같이 for문 안에 있는 i 값을 변경해도 괜찮은지도 궁금합니다!
function solution(k: number, arr: number[]): number {
let sum: number = 0;
let count: number = 0;
let max: number = 0;
for (let i = 0; i < arr.length; i++) {
if (count < k) {
sum += arr[i];
count++;
} else {
if (max < sum) {
max = sum;
}
i = i - count;
count = 0;
sum = 0;
}
}
return max;
}감사합니다
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
연이님, 코드 공유해주셔서 감사합니다.
변수 count를 사용해서 일정 횟수만큼 연산을 수행하고, 이를 통해 for 반복문 안에서 i의 값을 조정하는 방식으로 구현하신 것 같네요. 일반적으로 for 문의 증감식(i++)에서 조정하는 것은 피하는 게 좋습니다. 그 이유는 for 문의 반복 로직을 이해하기 어렵게 만들고, 루프의 흐름을 예측하기 어렵게 하기 때문입니다.
하지만 특정한 상황에서는 i 값을 조정해야 할 수도 있으며, 이는 실제로 유효한 프로그래밍 기법 중 하나입니다. 그러나 이럴 때는 로직이 명확하게 이해될 수 있도록 코드를 작성하는 것이 중요하며, 가능하면 더 나은 대안을 찾아보는 것이 좋습니다.
본 코드의 경우, sum을 구하는 부분을 개선할 필요가 있어 보입니다. 예를 들어, ‘슬라이딩 윈도우’ 알고리즘을 사용하면 i 값을 직접 조정하지 않고도 문제를 해결할 수 있습니다. 현재 구현하신 로직으로는 arr 배열을 여러 번 반복하게 되므로, 효율성 측면에서 개선의 여지가 있습니다.
for 문을 한 번만 사용하고, 완성된 window의 첫 번째 값을 빼고 다음 값을 더하는 방식으로 최대합을 구하는 슬라이딩 윈도우 알고리즘을 적용해 보세요. 이렇게 하면 배열을 한 번만 순회하면서 문제를 해결할 수 있습니다.
슬라이딩 윈도우 알고리즘에 대한 참고 코드는 아래와 같습니다:
function solution(k: number, arr: number[]): number {
let sum: number = 0;
let max: number = 0;
// 처음 k개의 요소의 합을 구함
for (let i = 0; i < k; i++) {
sum += arr[i];
}
max = sum;
// 슬라이딩 윈도우로 나머지 요소들 확인
for (let i = k; i < arr.length; i++) {
sum += arr[i] - arr[i - k];
max = Math.max(max, sum);
}
return max;
}
위와 같이 코드를 작성하면, 복잡도는 O(n)으로 i 값을 조정하지 않고 문제를 해결할 수 있습니다.
코드 개선에 도움이 되셨길 바라며, 추가로 궁금한 점이 있으시면 언제든지 질문해주세요.
continue를 사용하는 이유
0
79
2
정렬 가능 여부 판단하기
0
64
2
알고리즘 학습법 관련해서 질문드립니다.
0
86
1
코드 리뷰 부탁드립니다!
0
90
1
indexOf를 사용해서 풀어보았습니다 !!
0
68
1
저는 이런식으로 구현 해보았습니다 !!
0
64
1
12,13,14 강의 소리만 나오고 검은 화면입니다
0
100
3
반복문 최소화하고 indexOf 사용해서 풀어봤습니다
0
63
1
영상 보기 전에 직접 풀어봤습니다.
0
74
1
섹션1의 17번문제 이 풀이로 풀어도 될까요?
0
135
2
정규표현식으로 처리해도 상관없나요 ?
0
120
2
3칸씩 건너뛸 수 있을 경우
0
125
2
강의에 대해 질문있습니다.
0
135
2
Object와 Set을 이용해 풀어봤습니다.
0
117
2
이렇게 해도 되나요?
0
102
2
선생님 중복 단어나 중복관련 문제들은 set을 이용하면 좋을것 같습니다.
0
145
2
이렇게 풀어도 괜찮을까요?
0
138
1
이렇게 풀어도 괜찮을까요?
0
112
1
모든 아나그램 찾기에서 시간복잡도
0
98
1
코드리뷰 부탁드립니다.
0
130
1
for loop 탈출은 return 문으로 해도 되지 않나요?
0
133
1
투포인트알고리즘으로 풀어봤습니다.
0
142
0
코드 리뷰 부탁드립니다.
0
120
1
코드 맞게 작성한 거 아닌가여??
0
146
1





