개요
next라는 변수의 값만 바뀌고, 나머지는 동일한 내용이 반복되는 코드였다.
next = {cur+1, cur-1, cur+cur}로 선언하여 간결하게 코드를 작성할 수 있다.
예시
기존 코드
while(!q.empty()){
int cur = q.front();
q.pop();
int next = cur+1;
if(next <= k){
if(dist[next]==-1){
q.push(next);
dist[next] = dist[cur]+1;
}
}
next = cur-1;
if(next >=0){
if(dist[next]==-1){
q.push(next);
dist[next] = dist[cur]+1;
}
}
next = cur+cur;
if(next < MAX){
if(dist[next]==-1){
q.push(next);
dist[next] = dist[cur]+1;
}
}
}
개선한 코드
while(!q.empty()){
int cur = q.front();
q.pop();
//방문할 노드를 for문에 선언한다
for(int next : {cur-1, cur+1, cur+cur}){
if(next > MAX || next < 0) continue;
if(dist[next]==-1){
q.push(next);
dist[next] = dist[cur]+1;
cnt[next] = cnt[cur];
}
}
}
'Study > C,C++' 카테고리의 다른 글
priority_queue에 struct를 넣을 때는 연산자 오버로딩이 필요하다 (0) | 2020.07.09 |
---|---|
memset으로 bool값을 true로 설정해도 될까? (0) | 2020.05.04 |
C++ filesystem:: C++에서 파일디렉토리/파일 시스템 읽어오기 (0) | 2019.10.18 |
헤더파일에 using namespace를 하지 말아야 하는 이유 (0) | 2019.10.18 |
[Error]undefined reference to ~ 해결법 (0) | 2019.10.07 |