boj 15683 : 감시
문제를 해결할때,
가능한 경우들에 대해서 이걸 4진법의 수로 표현하는 방법에 대한 코드를 작성할때,
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
for(int tmp=0; tmp<64; tmp++){
int brute=tmp;
for(int i=0; i<3; i++){
cout<<brute%4;
brute/=4;
}
cout<<'\n';
}
}
이와같이 작성할 수 있는데,
이때에 출력해보면, 출력물의 경우는
000
100
200
300
010
110
210
310
020
120
220
320
030
130
230
330
001
101
201
301
011
111
211
311
021
121
221
321
031
131
231
331
002
102
202
302
012
112
212
312
022
122
222
322
032
132
232
332
003
103
203
303
013
113
213
313
023
123
223
323
033
133
233
333
이와같이 총 64가지의 값을 출력하게 된다.
이 수들의 경우는,
0을 4진수로 나타낼때 역방향으로,
1을 4진수로 나타낼때 역방향으로(100이 출력되었는데, 뒤에서부터 001로 보면 이 수가 바로 1을 4진수로 나타낸 수와 같다)
2을 4진수로 나타낼때 역방향으로(200이 출력되었는데, 뒤에서부터 002로 보면 이 수가 바로 2을 4진수로 나타낸 수와 같다)
...
62를 4진수로 나타낼때 역방향으로(233이 출력되었는데, 뒤에서부터 332로 보면 이 수가 바로 62를 4진수로 나타낸 수와 같다)
63을 4진수로 나타낼 때 역방향으로(333으로 출력되었는데, 뒤에서부터 333로 보면 이 수가 바로 63을 4진수로 나타낸 수와 같다)
형태로 출력된 것이고, 각각의 수에서 하나하나의 수를
2중 for문에서 안쪽의 for문에 해당하는
for(int i=0; i<3; i++){
cout<<brute%4;
brute/=4;
}
로 출력한 각각의 값에 해당한다.
다음에도 이렇듯 각각의 경우의 수가 독립적인 경우, 진법을 이용해서 각각의 수를 표현하면 백트래킹을 사용하지 않고
각각의 경우의 수 들을 통해 케이스를 셀때 활용할 수 있다.
이런 형태의 코드 형식에 익숙해지도록 하자.
'알고리즘 > BOJ' 카테고리의 다른 글
boj 3015번 문제에 대한 새로운 풀이를 찾다가 발견한 색다른 방법에 대하여. 이런 형태로 작성하는 것을 이해해보자. (0) | 2023.09.04 |
---|---|
boj 6198 옥상 정원 꾸미기 || 이 문제를 통해서, 예제가 제시해주는 형태로 답을 낼 필요가 없다는 것에 대해서 배움. (0) | 2023.08.31 |
c++ 을 통해 문자열 기초를 학습하면서 접하게된 c=c+'a'와 c+='a'의 차이에 대해서. (0) | 2023.07.31 |
boj 17835번 문제를 통해서 연산과정을 줄일 수 있는 방법에 대해서 생각해본 개선점과 주의사항들. (작성중) (0) | 2023.07.29 |
boj 1238 번 문제를 통해 보는 다익스트라와 왕복 거리. (0) | 2023.07.26 |