728x90
url : https://school.programmers.co.kr/learn/courses/30/lessons/161989
SegFault(Core dumped) 발생한 코드
#include <bits/stdc++.h>
using namespace std;
bool colored[100004];
int solution(int n, int m, vector<int> section) {
int answer = 0;
//1. section 시작점부터 m칸 색칠
for(int i=0;i<section.size();i++){
int start = section[i];
if (colored[start]==1) continue;
for(int j=start;j<start+m;j++){
colored[j]=true;
}
answer++;
}
return answer;
}
위 코드에서 colored[j] 접근시에 start+m-1이 colored 초기화 범위를 벗어나므로 에러가 발생한다.
✅ 배열 접근시 범위 확인
해결 코드
#include <bits/stdc++.h>
using namespace std;
bool colored[100004];
int solution(int n, int m, vector<int> section) {
int answer = 0;
//1. section 시작점부터 m칸 색칠
for(int i=0;i<section.size();i++){
int start = section[i];
if (colored[start]==1) continue;
for(int j=start;j<min(start+m, n+1);j++){
colored[j]=true;
}
answer++;
}
return answer;
}
배열에 접근할 수 있는 인덱스 범위를 제한한다.
for(int j=start;j<min(start+m, n+1);j++){
colored[j]=true;
}
모범 코드
int pivot=section[0];
for(auto s:section){
if(s<pivot+m) continue;
else {
pivot=s;
answer++;
}
}
pivot을 사용해 기준점을 정하고, 색칠되지 않은 부분으로 이동한다.
(한창균님 풀이)
https://school.programmers.co.kr/learn/courses/30/lessons/161989/solution_groups?language=cpp
728x90
'알고리즘 > 알고리즘 문제풀이' 카테고리의 다른 글
[프로그래머스] 160586: 대충 만든 자판 (0) | 2023.12.02 |
---|---|
[프로그래머스] 43162: 네트워크 (0) | 2023.11.30 |
[백준] 2467:용액 (0) | 2023.11.28 |
[백준] 14503: 로봇 청소기 (2) | 2023.11.27 |
[백준] 2109 : 순회강연 / OutOfBounds 런타임 에러 (0) | 2023.11.27 |