프로그래머스 - 방문 길이
2022. 8. 30. 13:31ㆍ코딩 공부 연습
반응형
프로그래머스에 스킬 체크니 뭐니 해서 1시간 동안 2문제를 검색없이 진짜 코테 볼때처럼 푸는 게 있더라! 그게 너무 재밌어서 하루에 한번씩 해보는 중인데 이 문제를 풀게 되었다. 쉽게 풀수 있을 줄 알았는데 이상한 헛짓거리들을 하다가 좀 시간이 걸렸다.. 아직 레벨2도 통과를 못하는 모습이 참 안쓰럽다. 시간을 신경쓰면서 갈기느라 코드가 중간중간 없어도 되는것들도 껴있고 더럽다!
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int visited[11][11][11];
int visited2[11][11][11]; //3번째인자가 상하, 좌우 구분
int solution(string dirs) {
//걍 현재 위치를 계속 업데이트하면서 벡터v페어쌍 (a,b), (b,a)를 visited 표시를 계속 해준다.
int answer = 0;
pair<int,int> cur;
cur={5,5};
int cnt = 0;
for(int i =0; i < dirs.size(); i++)
{
if (dirs[i] == 'U')
{
if (cur.second == 10)
continue;
if ( visited[cur.first][cur.second][cur.second + 1] == 0)
cnt++;
visited[cur.first][cur.second][cur.second + 1] = 1;
visited[cur.first][cur.second + 1][cur.second] = 1;
cur.second++;
}
else if (dirs[i] == 'D')
{
if (cur.second == 0)
continue;
if ( visited[cur.first][cur.second][cur.second - 1] == 0)
cnt++;
visited[cur.first][cur.second][cur.second - 1] = 1;
visited[cur.first][cur.second - 1][cur.second] = 1;
cur.second--;
}
else if (dirs[i] == 'R')
{
if (cur.first == 10)
continue;
if ( visited2[cur.first][cur.first + 1][cur.second] == 0)
cnt++;
visited2[cur.first][cur.first + 1][cur.second] = 1;
visited2[cur.first + 1][cur.first][cur.second] = 1;
cur.first++;
}
else if (dirs[i] == 'L')
{
if (cur.first == 0)
continue;
if ( visited2[cur.first][cur.first - 1][cur.second] == 0)
cnt++;
visited2[cur.first][cur.first - 1][cur.second] = 1;
visited2[cur.first - 1][cur.first][cur.second] = 1;
cur.first--;
}
}
answer = cnt;
return answer;
}
그냥 단순무식하게 테이블이 최대 크기가 10x10 으로 정해져 있기 때문에 3 -> 4 로 위로 이동했을 경우를 체크하는 배열들을 다 만들어서 visited 체크를 해주었다. 위아래, 좌우 방향 이동에 해당하는 배열들을 만들었는데, 저렇게 3차원으로 만든이상 visited를 2개로 나눌 필요도 없었다. 시간이 없었고 중간에 3차원으로 바꾸는 바람에 이해하기 어렵게 되어버린 것 같다. 만약 이동한 간선이 한번도 방문한 적 없는 경우에 카운트를 증가해 주었다.
'코딩 공부 연습' 카테고리의 다른 글
프로그래머스 짝지어 제거하기 (0) | 2022.09.01 |
---|---|
프로그래머스 - 구명 보트 (0) | 2022.08.30 |
프로그래머스 - 위장 (0) | 2022.08.26 |
백준 7785 - 회사에 있는 사람 (0) | 2022.08.26 |
백준 - 5014 스타트링크 (0) | 2022.08.24 |