반응형
링크
https://swexpertacademy.com/main/main.do
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
1. 해결방법
모든 지점을 상 하 좌 우로 들리면서 7번째로 도착하면 set에 저장하면 자동으로 중복을 제거해 줄 수 있을 거라고 생각했다. 따라서 모든 지점을 상 하 좌 우로 들리는 방법을 코드로 구현하려 하였으나 결국 검색하여 찾아보니 dfs와 bfs방법을 사용한다고 한다. 이 문제의 해결방법으로는 dfs를 사용했고 dfs와 bfs는 따로 나중에 알고리즘에 추가하도록 할 예정이다.
2. 코드
#include <string>
#include <math.h>
#include <iostream>
#include <set>
using namespace std;
int num = 0;
int arr[4][4];
set<int> setary;
void dfs(int x, int y, int val, int dept) {
int nx[4] = { 0, 0, -1, 1 };
int ny[4] = { -1, 1, 0, 0 };
for (int i = 0; i < 4; i++) {
if (dept == 7) {
setary.insert(val);
return;
}
int dx = x + nx[i];
int dy = y + ny[i];
if (dx < 0 || dx >= 4 || dy < 0 || dy >= 4) continue;
else {
dfs(dx, dy, val * 10 + arr[dy][dx], dept + 1);
}
}
}
int main()
{
cin >> num;
for (int i = 1; i <= num; i++) {
setary.clear();
for (int j = 0; j < 4; j++) {
for (int k = 0; k < 4; k++) {
cin >> arr[j][k];
}
}
for (int j = 0; j < 4; j++) {
for (int k = 0; k < 4; k++) {
dfs(j, k ,arr[j][k], 1);
}
}
cout << "#"<< i << " " << setary.size() << endl;
}
}
main함수에서 dfs(j, k, arr[j][k], 1)이 부분을 처음에 0, 0 arr[j][k], 1로 하였다 이때 값이 항상 같은 오류가 생겼고 이를 j k로 수정하며 해결하였다.
반응형
'코딩테스트 > SW expert' 카테고리의 다른 글
[SW Expert] #1244 S/W 문제해결 응용 2일차 - 최대 상금 (0) | 2019.11.27 |
---|---|
[SW Expert] #2806 N-Queen (0) | 2019.11.22 |
[SW Expert] #3752 가능한 시험점수 (0) | 2019.11.17 |
[SW Expert] #1249 S/W 문제해결 응용 4일차 - 보급로 (0) | 2019.11.07 |
[SW Expert] #1206 S/W 문제해결 기본 1일차 - View (0) | 2019.11.01 |