2023. 2. 24. 16:38, 알고리즘/BOJ
boj 1697번 숨바꼭질 문제를 풀때, for문을 돌릴때 경우가 3가지이고, 각각이 순차적인 수의 변화가 아니라 x+1,x-1,2*x형태일때의 for문의 활용의 방법을 보자면,
#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second
int dist[100002];
int n,k;
int main(void){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> k;
fill(dist, dist+100001,-1);
dist[n] = 0;
queue<int> Q;
Q.push(n);
while(dist[k] == -1){
int cur = Q.front(); Q.pop();
for(int nxt : {cur-1, cur+1, 2*cur}){
if(nxt < 0 || nxt > 100000) continue;
if(dist[nxt] != -1) continue;
dist[nxt] = dist[cur]+1;
Q.push(nxt);
}
}
cout << dist[k];
}
중간에 for문에서 (int nxt:{cur-1,cur+1,2*cur}) 부분처럼,
for(int a: {b,c,d})형태로 작성하면, for문을 돌때
1. a==b일때,
2 a==c 일때,
3 a==d일때 로 나누어서 돌릴 수 있다.
예시를 들기 위해 간단하게 작성한 코드를 실행해보면,
#include <bits/stdc++.h>
using namespace std;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
for (int a : {1, 2, 4}) {
cout << a * 2;
}
}
이 코드의 실행 결과는, 출력물이 2,4,8이 나오게 된다.
이런식으로 for문을 돌릴 수 있다는걸 기억하고, 순차적으로 수가 증가하는 for문이 아니라, 특정한 경우의 인자들을 받아서 for문을 돌릴때 활용하도록 하자.
'알고리즘 > BOJ' 카테고리의 다른 글
0x0B-재귀. 함수의 반환 형식에 따라서 return을 통한 함수의 종료에서 넣어주는 값이 다르다. (0) | 2023.02.24 |
---|---|
0x09강-BFS. fill문을 통한 배열 내의 원소들의 값 변경하기. (0) | 2023.02.24 |
0x09강-BFS. 전처리기를 쓸때 ; 를 입력해버리면 오류를 찾기 어렵다. 습관적으로 전처리기에 ;를 붙이지않도록 하자. (0) | 2023.02.23 |
0x08강-스택의 활용. getline(cin, a); 의 활용에 대해서 익숙해지자. (0) | 2023.02.22 |
0x07강 덱(deque)-Double Ended Queue (0) | 2023.02.02 |
Comments, Trackbacks