일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- ICER
- 마법의숲탐색
- ARM
- 3Dreconstruction
- 이진탐색
- 조합
- 토끼와 경주
- Calibration
- 코드트리빵
- ros
- 루돌프의반란
- BFS
- 나무박멸
- 소프티어
- 코드트리
- dfs
- 삼성기출
- 구현
- 순서대로방문하기
- DenseDepth
- 마이크로프로세서
- 슈퍼컴퓨터클러스터
- 싸움땅
- 수영대회결승전
- ISER
- 백준
- 왕실의기사대결
- 포탑부수기
- DP
- 시뮬레이션
Archives
- Today
- Total
from palette import colorful_colors
[백준] 14503 로봇 청소기 with C++ (삼성기출) 본문
주어진대로 침착하게 구현만 하면 해결되는 문제!
딱히 알고리즘이 필요없는 쌩구현, 시뮬레이션 문제
#include <iostream>
#include <cstring>
using namespace std;
int N, M;
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};
int MAP[50][50];
int cnt;
int curR, curC, direction;
// 반시계 방향으로 value만큼 방향 변환
int directionChange(int direction, int value) {
int temp = direction - value;
if (temp < 0) temp += 4;
return temp;
}
// 주변 4칸 중 먼지 찾기 함수
bool dustFind(int row, int col) {
for (int k = 0; k < 4; k++)
{
int newRow = row + dx[k];
int newCol = col + dy[k];
if (MAP[newRow][newCol] == 0) {
return true;
}
}
return false;
}
int main() {
cin >> N >> M;
cin >> curR >> curC >> direction;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
cin >> MAP[i][j];
}
}
// 청소 안 된 칸: 0, 벽: 1 청소된 칸: 2
//bool power = true;
while (1){
// 1번: 현재칸 청소
if (MAP[curR][curC] == 0) {
MAP[curR][curC] = 2;
cnt++;
}
// 3번
if (dustFind(curR, curC)) {
direction = directionChange(direction, 1);
int tempRow = curR + dx[direction];
int tempCol = curC + dy[direction];
if (MAP[tempRow][tempCol] == 0) {
curR = tempRow;
curC = tempCol;
}
}
// 2번
else {
int tempDirection = directionChange(direction, 2);
int tempRow = curR + dx[tempDirection];
int tempCol = curC + dy[tempDirection];
if (MAP[tempRow][tempCol] != 1) {
curR = tempRow;
curC = tempCol;
}
else {
break; // 작동 종료
}
}
}
cout << cnt;
}
'알고리즘 > 문제풀이' 카테고리의 다른 글
[백준] 16236 아기상어 with C++ (0) | 2024.02.22 |
---|---|
[SWEA] 2382 미생물 격리 with C++ (0) | 2024.02.21 |
[백준] 15685 드래곤 커브 with C++ (삼성기출) (1) | 2024.02.19 |
[SWEA] 5656 벽돌깨기 with C++ (0) | 2024.02.19 |
[SWEA] 1767 프로세서 연결하기 with C++ (0) | 2024.02.19 |