2023. 4. 18. 15:30, 알고리즘/BOJ
while(dist[k] == -1){ // 목표 위치의 최소 이동 횟수를 찾을 때까지 반복
int cur = Q.front(); Q.pop(); // 큐에서 현재 위치를 꺼냄
for(int nxt : {cur-1, cur+1, 2*cur}){ // 현재 위치에서 이동 가능한 3가지 경우를 고려
if(nxt < 0 || nxt > 100000) continue; // 범위를 벗어나면 스킵
if(dist[nxt] != -1) continue; // 이미 방문한 위치인 경우 스킵
dist[nxt] = dist[cur]+1; // 최소 이동 횟수를 갱신하여 dist 배열에 저장
Q.push(nxt); // 다음 위치를 큐에 넣음
}
}
cout << dist[k]; // 도착 위치의 최소 이동 횟수 출력
return 0;
이러한 코드를 접하게 되었는데,
이때에 'for' loop의 형태가 내가 그동안 알던 형태가 아니었고, 3가지 일관적이게 규칙성이 있는 원소들에 대한 for loop가 아니어서 이것에 대해서 gpt에 질문을 해보았다.
그와 관련된 답변은 아래 내용과 같다.
이와 관련하여서 추가적으로 질문을 하여서 얻읃 답변을 첨부해보면
이렇게 내용이 나오는데, 이렇게 된 글을 읽고보니, 이 형태가 지금까지 익숙하게 사용하였던
for(auto c:s) 형태와 같다는 생각이 들었다.
이게 원래 auto c: s에서 s가 string이고, 이것도 결국 배열이므로, 여기서 컨테이너 부분에 해당하는 것이라는 생각이 든다.
이번의 경우 auto c: 부분에 해당하는게 int nxt: 이고, s 부분에 해당하는게 {cur-1,cur+1,2*cur}부분으로 보여진다.
원래 있던 s에 대해서가 아니라 새롭게 array로 {cur-1,cur+1,2*cur}을 잡아서 바로 auto c:s 형태처럼 사용한 것이구나.
이렇게 사용하는 방법도 있다는걸 알아두고 이렇게 사용해보도록 하자.
이렇게 되면 순차적 순회를 할때 각각의 원소들이 일관성 있는 규칙을 따를 필요가 없다.
그러니까 이 방법을 알면 이러한 3가지 경우 각각에 대해서 for문을 돌때 아주아주 편하게 할 수 있는 것이다.
'알고리즘 > BOJ' 카테고리의 다른 글
c++ -1이 포함된 형태의 cin에서 char로 받는것의 부적절성에 관하여. (0) | 2023.04.18 |
---|---|
c++ cin을 이용해서 공백없이 쭉 이어서 주어진 행렬형태 입력받기. (0) | 2023.04.18 |
TIL 23.4.17//오늘 배운 것. c++에서 별칭을 사용하는 방법에 관하여. (0) | 2023.04.17 |
c++에서 전처리지시문 #define과 typedef를 활용해서 long long을 ll로 표현할때의 차이점에 관하여. //추가적으로 using ll = long long; (0) | 2023.04.17 |
while (!dq.empty() && dq.back().second >= num) 형태의 코드의 이해. (0) | 2023.04.16 |
Comments, Trackbacks