SW Expert Academy의 Ladder2(1211 / d4) 문제이다.
[ 문제풀이 ]
1) Ladder1과 굉장히 비슷한 문제이다. 단지 다른점이 있다면, Ladder1에서는 가장 마지막에 '2'로 가게되는 사다리의 시작점을
찾는것이 문제였다면, 이 문제는 가장 빠르게 가장 아래쪽으로 내려갈 수 있는 사다리 번호를 맞추는 것이 문제이다.
구현과정은 Ladder1과 마찬가지로 그리 어렵지 않고, 설명보다는 소스코드를 보는 것이 이해가 더 빠를 것 같다.
사다리가 있는 모든 칸에서 사다리게임을 시작하면서, 내려갈 때 존재하는 모든 칸수를 Count하면서 최소값과 비교하면서
갱신해주는 방식으로 구현해주었다.
[ 소스코드 ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | #include<iostream> #define endl "\n" #define MAX 100 using namespace std; int Answer, Temp_Answer; int N; int MAP[MAX][MAX]; void Initialize() { Temp_Answer = 987654321; Answer = -1; } void Input() { cin >> N; for (int i = 0; i < MAX; i++) { for (int j = 0; j < MAX; j++) { cin >> MAP[i][j]; } } } int Start_Ladder(int line) { int Cnt = 1; int x = 0; int y = line; char Dir = 'D'; while (1) { if (Dir == 'D') { x++; Cnt++; while (1) { if (x == MAX - 1) { return Cnt; } if (y + 1 < MAX) { if (MAP[x][y + 1] == 1) { Dir = 'R'; break; } } if (y - 1 >= 0) { if (MAP[x][y - 1] == 1) { Dir = 'L'; break; } } x++; Cnt++; } } else if (Dir == 'R') { y++; Cnt++; while (1) { if (x + 1 < MAX) { if (MAP[x + 1][y] == 1) { Dir = 'D'; break; } } y++; Cnt++; } } else if (Dir == 'L') { y--; Cnt++; while (1) { if (x + 1 < MAX) { if (MAP[x + 1][y] == 1) { Dir = 'D'; break; } } y--; Cnt++; } } } } void Solution() { for (int i = 0; i < MAX; i++) { if (MAP[0][i] == 1) { int R = Start_Ladder(i); if (Temp_Answer > R) { Temp_Answer = R; Answer = i; } } } } void Solve() { int Tc = 10; for (int T = 1; T <= Tc; T++) { Initialize(); Input(); Solution(); cout << "#" << T << " " << Answer << endl; } } int main(void) { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); // freopen("Input.txt", "r", stdin); Solve(); return 0; } | cs |
'[ SWEA Code ] > # SWEA - ' 카테고리의 다른 글
[ SWEA 1213 ] String (C++) (0) | 2019.03.04 |
---|---|
[ SWEA 1251 ] 하나로 (C++) (2) | 2019.03.04 |
[ SWEA 1244 ] 최대상금 (C++) (0) | 2019.02.19 |
[ SWEA 1210 ] Ladder1 (C++) (0) | 2019.02.19 |
[ SWEA 1208 ] Flatten (C++) (0) | 2019.02.19 |