KoreanFoodie's Study
SW 역량테스트 - [백준] 로봇 청소기 문제 풀이/해답/코드 (C++ / JAVA) 본문
Data Structures, Algorithm/SW 역량테스트
SW 역량테스트 - [백준] 로봇 청소기 문제 풀이/해답/코드 (C++ / JAVA)
GoldGiver 2020. 9. 29. 11:36
SW 역량 테스트 준비를 위한 핵심 문제들을 다룹니다!
해답을 보기 전에 문제를 풀어보시거나, 설계를 하고 오시는 것을 추천드립니다.
코드에 대한 설명은 주석을 참고해 주세요 :)
문제 링크 : www.acmicpc.net/problem/14503
해답 코드 :
// c++
#include<iostream>
using namespace std;
#define MAX 51
int N, M;
int input[MAX][MAX];
int x, y;
int result;
int direction;
//북, 동, 남, 서
int dx[] = { -1, 0, 1, 0 };
int dy[] = { 0, 1, 0, -1 };
int main() {
cin >> N >> M;
cin >> x >> y >> direction;
for (int i = 0; i < N; i++)
for (int j = 0; j < M; j++)
cin >> input[i][j];
while (1) {
// 현재위치 청소
if (input[x][y] == 0) {
input[x][y] = 2;
result++;
}
int nextStep = 0;
for (int i = 0; i < 4; i++) {
// 왼쪽 방향으로 전환
direction = (direction + 3) % 4;
int newX = x + dx[direction];
int newY = y + dy[direction];
if (input[newX][newY] == 0) {
x = newX;
y = newY;
nextStep = 1;
break;
}
}
if (nextStep == 1)
continue;
// 후진
int newDirection = (direction + 2) % 4;
x = x + dx[newDirection];
y = y + dy[newDirection];
if (input[x][y] == 1)
break;
}
cout << result;
}
import java.io.*;
import java.util.Scanner;
public class Main {
static int[][] map;
static boolean[][] visit;
static int N, M, area = 0;
static int[] dX = {-1, 0, 1, 0};
static int[] dY = {0, 1, 0, -1};
static int rotate(int dir) {
if (dir == 0) return 3;
else if (dir == 1) return 0;
else if (dir == 2) return 1;
else return 2;
}
static boolean bound(int r, int c) {
if (r < 0 || r > N || c < 0 || c > M) {
return false;
} else return true;
}
static int back(int dir) {
if (dir == 0) return 2;
else if (dir == 1) return 3;
else if (dir == 2) return 0;
else return 1;
}
static void clean(int r, int c, int dir) {
if (!visit[r][c]) visit[r][c] = true;
// search from left
int r_l;
int c_l;
// 2.a
for (int i = 0; i < 4; i++) {
r_l = r+dX[rotate(dir)];
c_l = c+dY[rotate(dir)];
if (bound(r_l, c_l)) {
if (map[r_l][c_l] == 0 && !visit[r_l][c_l]) {
// 2.a
clean(r_l, c_l, rotate(dir));
return;
} else {
dir = rotate(dir);
}
}
}
// time to move backward
r_l = r + dX[back(dir)];
c_l = c + dY[back(dir)];
if (bound(r_l, c_l)) {
if (map[r_l][c_l] == 0) {
clean(r_l, c_l, dir);
} else {
return;
}
}
}
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
M = sc.nextInt();
map = new int[N][M];
visit = new boolean[N][M];
int r, c, dir;
r = sc.nextInt();
c = sc.nextInt();
dir = sc.nextInt();
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
map[i][j] = sc.nextInt();
}
}
clean(r, c, dir);
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if (visit[i][j]) area++;
}
}
System.out.println(area);
}
}
SW 역량테스트 준비 - [모의 SW 역량테스트] 풀이 / 코드 / 답안 (C++ / JAVA)
SW 역량테스트 준비 - C++ 코드, Java 코드
SW 역량테스트 준비 - 백준 알고리즘 문제
'Data Structures, Algorithm > SW 역량테스트' 카테고리의 다른 글
SW 역량테스트 - [모의 SW 역량테스트] 활주로 건설 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.09.29 |
---|---|
SW 역량테스트 - [모의 SW 역량테스트] 점심 식사시간 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.09.29 |
SW 역량테스트 - [백준] 영역 구하기 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.09.29 |
SW 역량테스트 - [모의 SW 역량테스트] 홈 방범 서비스 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.09.29 |
SW 역량테스트 - [백준] 연구소 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.09.29 |
Comments