티스토리 뷰

너무 어려웠다. 몇가지 생각할 사항이 있다.

 

1. 11*11 그래프 내에서 하나의 지점이 아니라 하나의 구간을 기준으로 생각해야 하기 때문이다. 

그래서 하나의 지점에 대해 상하좌우 모든 구간을 생각할 수 없어서 가로 구간 세로 구간을 나눠서 생각했다.

 

2. 문제에서는 (0, 0)으로 시작했지만 그러면 2차원 행렬 인덱스가 음수를 갖게 되므로 시작 위치를 5,5로 지정해야한다.

 

3.  한 지점에 대해서 위로 움직이는 것은 바로 위의 지점에서 아래로 움직이는 것과 같은 구간을 가져야한다.

예를 들어 (5, 5) 지점에서 위로 가는 행동과 아래로 가는 행동이 똑같이 sero[5][5] = 1 이면 안된다는 뜻이다.

그러므로 나름의 기준이 있어야 한다.

 

예를 들어 윗 방향을 기준으로 한다고 하면, (5, 5) 위치에서 위로 가는 경우면 sero[x][y] =1을 하지만 

(5, 5) 위치에서 아래로 간다고 하면 이미 nextX, nextY 는 5, 4를 의미하는 것이므로 sero[nextX][nextY] =1 을 한다.

 

 

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
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
 
int sero_map[11][11= {0};
int garo_map[11][11= {0};
 
int solution(char* dirs)
{
    int answer = 0;
    int dirsX[4= {001-1};
    int dirsY[4= {1-100};
    
    int x = 5int y = 5;
    int nextX; int nextY;
    int dirs_index;
    
    for(int i = 0; i < strlen(dirs); i++){
        
        if (dirs[i] =='U'){ dirs_index = 0; }
        else if (dirs[i] == 'D'){ dirs_index = 1; }
        else if (dirs[i] == 'R'){ dirs_index = 2; }
        else if (dirs[i] == 'L'){ dirs_index = 3; }
        
        nextX = x + dirsX[dirs_index];
        nextY = y + dirsY[dirs_index];
        
        if(nextX >=0 && nextY >=0 && nextX <= 10 && nextY <= 10){
            if (dirs_index == 0 ) { sero_map[x][y]++; }
            else if (dirs_index == 1) { sero_map[nextX][nextY]++; }
            else if (dirs_index == 2) { garo_map[x][y]++; }
            else if (dirs_index == 3) { garo_map[nextX][nextY]++; }
            x = nextX; y = nextY;
        }
    }
    
    for(int i = 0; i<= 10; i++){
        for(int j = 0; j<= 10; j++){
            if(garo_map[j][i] >= 1){
                answer ++;
            }
            if(sero_map[j][i] >= 1){
                answer ++;
            } 
        }
    }
 
    
    return answer;
}
댓글