728x90
난이도 : 골드 5
풀이 과정 :
와.. 그냥 빡구현으로 풀었슴... ㅋ ㅋ ㅋ
푼다음에 다른 사람꺼 풀이 보니까 dy dx 배열 선언해서 4방향으로 돌수 있게 반복문으로 처리한거같았는데
나는 그 방향 바뀔 때 dy dx가 규칙성 있게 바뀔 거라는 건 예상이 가지만 수식이 도저히 생각이 안나서....
그냥 동서남북 조건 나눠서 일일히 x랑 y값 선언해주면서 했음..
위에 chk함수는 청소하고자 하는 (r,c)가 배열의 범위를 벗어났을때를 판별하기위해 선언해줬습니다..
1을 리턴할때는 청소가능한거, 2를 리턴한건 청소했던 구역을 의미
하 , , , 지금까지 푼 것중에 코드길이 제일 김.. 리팩토링 오지게 마려운 코드다
#include <iostream>
using namespace std;
int n, m, r, c, d, arr[55][55], ans;
int chk(int r, int c) {
if (r >= 0 && c >= 0 && r < n && c < m && arr[r][c] == 0) return 1;
else if (r >= 0 && c >= 0 && r < n && c < m && arr[r][c] == 2) return 2;
else return 0;
}
int main()
{
cin >> n >> m >> r >> c >> d;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> arr[i][j];
}
}
while (true) {
arr[r][c] = 2;
ans++;
/* cout << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << arr[i][j] << " ";
}
cout << endl;
}
cout << r << " " << c << " " << d << endl;*/
if (d == 0) {
if (chk(r, c - 1)==1) { // 서
c--;
d = 3;
}
else {
if (chk(r + 1, c) == 1) { // 남
r++;
d = 2;
}
else if (chk(r, c + 1) == 1) { // 동
c++;
d = 1;
}
else if (chk(r - 1, c) == 1) { //북
r--;
d = 0;
}
else {
if (chk(r + 1,c) == 2) {
r++;
ans--;
}
else break;
}
}
}
else if (d == 1) {
if (chk(r - 1, c) == 1) { //북
r--;
d = 0;
}
else {
if (chk(r, c - 1) == 1) { // 서
c--;
d = 3;
}
else if (chk(r + 1, c) == 1) { // 남
r++;
d = 2;
}
else if (chk(r, c + 1) == 1) { // 동
c++;
d = 1;
}
else {
if (chk(r,c - 1) == 2) {
c--;
ans--;
}
else break;
}
}
}
else if (d == 2) {
if (chk(r, c + 1) == 1) { // 동
c++;
d = 1;
}
else {
if (chk(r - 1, c) == 1) { //북
r--;
d = 0;
}
else if (chk(r, c - 1) == 1) { // 서
c--;
d = 3;
}
else if (chk(r + 1, c) == 1) { // 남
r++;
d = 2;
}
else {
if (chk(r - 1,c) == 2) {
r--;
ans--;
}
else break;
}
}
}
else if (d == 3) {
if (chk(r + 1, c) == 1) { // 남
r++;
d = 2;
}
else {
if (chk(r, c + 1) == 1) { // 동
c++;
d = 1;
}
else if (chk(r - 1, c) == 1) { //북
r--;
d = 0;
}
else if (chk(r, c - 1) == 1) { // 서
c--;
d = 3;
}
else {
if (chk(r,c+1) == 2) {
c++;
ans--;
}
else break;
}
}
}
}
cout << ans;
}
728x90
'Algorithm > Solution' 카테고리의 다른 글
[백준] 1406 에디터(C++) (0) | 2022.09.20 |
---|---|
[백준] 2792 보석 상자(C++) (0) | 2022.08.22 |
[백준] 15686 치킨 배달(C++) (0) | 2022.07.28 |
[백준] 2623 음악 프로그램(C++) (0) | 2022.07.15 |
[백준] 14502 연구소(C++) (0) | 2022.06.25 |