Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준
- Web
- DFS
- 시뮬레이션
- pass
- 백트래킹
- 월간 코드 챌린지
- 삼성 SW 역량 테스트
- Gold 5
- Level 2
- 브루트포스
- 부스트코스
- SWEA
- DP
- 구현
- Level 3
- 코드리뷰
- 프로그래머스
- next_permutation
- 스택/큐
- 2020 카카오 인턴십
- c++
- 2020 KAKAO BLIND
- 2019 KAKAO BLIND
- Level 4
- level 1
- BFS
- Gold 4
- 코드 리뷰
- 그리디
Archives
- Today
- Total
Min:D's Devlog
[백준][삼성 SW 역량 테스트][Gold 5][C++] 14503 로봇 청소기 본문
문제
백준 삼성 SW 역량 테스트 기출문제 - 14503 로봇 청소기 (Gold 5)
문제 풀이
접근 방식
로봇 청소기가 아래와 같이 작동할 때, 청소하는 영역의 개수를 구하는 문제이다.
이 문제는 위의 작동 방식대로 로봇 청소기를 구현하는 시뮬레이션 문제였다.
그래서 while문을 사용하여 조건대로 구현해주었다.
우선, 현 위치의 값이 0이면(청소가 되어있지 않으면) 값을 2로 바꿔주고 answer++를 수행하였다.
그 후, 네 방향을 왼쪽부터 탐색하며 다음으로 청소해야 할 곳으로 이동해주었다.
네 방향 모두 청소가 되어 있거나 벽인 경우에는,
현재 보는 방향에서 2를 빼서 보는 방향의 반대 방향으로 이동해주었다.
이동한 곳이 벽인 경우에는 while문을 종료하고, 답을 출력해주었다.
풀이 코드 - C++
#include <iostream>
#include <vector>
using namespace std;
int main() {
int N, M, x, y, d;
cin >> N >> M >> x >> y >> d;
vector<vector<int>> map(N, vector<int>(M));
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
cin >> map[i][j];
}
}
int dir[4][2] = { {-1,0},{0,1},{1,0},{0,-1} }; // 북 동 남 서
int answer = 0;
while(1) {
if (map[x][y] == 0) {
map[x][y] = 2;
answer++;
}
bool check = true;
for (int i = 0; i < 4; i++) {
if (d == 0) d = 4;
d--;
int nx = x + dir[d][0];
int ny = y + dir[d][1];
if (map[nx][ny] == 1) continue;
else if (map[nx][ny] == 0) {
x = nx;
y = ny;
check = false;
break;
}
}
if (check) { // 후진
int back = d - 2;
if (back < 0) back += 4;
x += dir[back][0];
y += dir[back][1];
if (map[x][y] == 1) // 뒤가 벽인 경우 종료
break;
}
}
cout << answer;
}
실행 결과
'알고리즘 > 백준' 카테고리의 다른 글
[백준][삼성 SW 역량 테스트][Gold 5][C++] 14502 연구소 (0) | 2020.10.05 |
---|---|
[백준][삼성 SW 역량 테스트][Silver 1][C++] 14888 연산자 끼워넣기 (0) | 2020.10.03 |
[백준][삼성 SW 역량 테스트][Silver 3][C++] 14889 스타트와 링크 (0) | 2020.10.01 |
[백준][삼성 SW 역량 테스트][Silver 1][C++] 14891 톱니바퀴 (0) | 2020.09.30 |
[백준][삼성 SW 역량 테스트][Gold 4][C++] 15685 드래곤 커브 (0) | 2020.09.29 |
Comments