겹치는 선분의 길이
겹치는 선분의 길이를 구하는 문제이다.
선분의 수가 많이 않기때문에 전체를 순회하며 횟수를 카운트하면 될 것 같다.
쉽게 생각해보자면 선분 벡터를 순회하면서 시작점에서 부터 끝점까지 순회하면서 만약 선분에 걸쳐져있는 점이라면 횟수를 증가시켜 2개이상의 선분이 걸쳐진 점이라면 answer을 증가시켜준다.
#include <string>
#include <vector>
using namespace std;
int line[200];
int solution(vector<vector<int>> lines) {
int answer = 0;
for (int i = 0; i < lines.size(); i++) {
for (int j = lines[i][0]; j < lines[i][1]; j++) { //시작점 ~ 도착점-1 까지에 있는 선분있다면 ++
line[j + 100]++; //음수값도 양수값범위안에 들도록
}
}
for (int i = 0; i < 200; i++) {
if (line[i] >= 2) {
answer++;
}
}
return answer;
}
안전지대
지역을 순회하면서 만약 지뢰가 있다면 지역의 범위에서 벗어나지 않는 선에서 상하좌우 대각선의 지역을 안전지대를 표시하는 0과 지뢰가 있는 지역인 1인 수를 제외하고 할당해주고 안전지대를 체크하면된다.
#include <string>
#include <vector>
using namespace std;
int dx[8] = { -1,1,0,0,-1,-1,1,1 }; //상하좌우 대각선
int dy[8] = { 0,0,-1,1,-1,1,-1,1 }; //상하좌우 대각선
int solution(vector<vector<int>> board) {
int answer = 0;
for (int i = 0; i < board.size(); i++) { //순회하면서
for (int j = 0; j < board[0].size(); j++) { //위,아래,좌,우,대각선에 지뢰가 있다면 위험지역
if (board[i][j] == 1) {
for (int k = 0; k < 8; k++) {
int curx = i + dx[k];
int cury = j + dy[k];
if (curx >= 0 && curx < board.size() && cury >= 0 && cury < board.size()) {
if (board[curx][cury] != 1) board[curx][cury] = 2; //안전지대가 아니라고 지뢰가 있는건 아니라서 1과는 다른값으로 할당
}
}
}
}
}
for (int i = 0; i < board.size(); i++) { //순회하면서
for (int j = 0; j < board[0].size(); j++) { //위,아래,좌,우,대각선에 지뢰가 있다면 위험지역
if (board[i][j] == 0) answer++;
}
}
return answer;
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][LV.2][C++]삼각 달팽이 (0) | 2024.05.06 |
---|---|
[프로그래머스][LV.2][C++]가장 큰 정사각형 찾기 (0) | 2024.05.06 |
[프로그래머스][LV 2][C++] 시소 짝꿍 (0) | 2024.03.11 |
[프로그래머스][LV 1][C++] [PCCE 기출문제] 10번 / 데이터 분석 (1) | 2024.03.07 |
[프로그래머스][LV 1][C++][PCCE 기출문제] 9번 / 이웃한 칸 (0) | 2024.03.06 |