본문 바로가기
프로그래머스

방의 개수 C++

by paysmile 2022. 3. 21.

https://programmers.co.kr/learn/courses/30/lessons/49190

 

코딩테스트 연습 - 방의 개수

[6, 6, 6, 4, 4, 4, 2, 2, 2, 0, 0, 0, 1, 6, 5, 5, 3, 6, 0] 3

programmers.co.kr

#include <string>
#include <vector>
#include <map>

using namespace std;
struct MOVE { int x, y; };
MOVE mv[8] = { {-1,0}, {-1,1}, {0,1}, {1,1}, {1,0}, {1,-1}, {0,-1}, {-1,-1} };
map<pair<int, int>, bool> edge;
map<pair<pair<int, int>, pair<int, int>>, bool> line;

int solution(vector<int> arrows) {
	int answer = 0;

	int movei = 0;
	int movej = 0;
	edge[{0, 0}] = true;
	for (int i = 0; i < arrows.size(); i++) {
		for (int k = 0; k < 2; k++) {
			int tmp_movei = movei + mv[arrows[i]].x;
			int tmp_movej = movej + mv[arrows[i]].y;

			if (edge[{tmp_movei, tmp_movej}] == true && line[{ {movei, movej}, { tmp_movei,tmp_movej }}] == false) {
				answer++;
			}

			line[{ {movei, movej}, { tmp_movei,tmp_movej }}] = true;
			line[{ {tmp_movei, tmp_movej}, { movei,movej }}] = true;
			edge[{tmp_movei, tmp_movej}] = true;
			movei = tmp_movei;
			movej = tmp_movej;
		}
	}

	return answer;
}

'프로그래머스' 카테고리의 다른 글

사칙연산 C++  (0) 2022.03.22
단어 퍼즐 C++  (0) 2022.03.22
지형 이동 C++  (0) 2022.03.21
스티커 모으기 C++  (0) 2022.03.19
가장 긴 팰린드롬 C++  (0) 2022.03.19