회원가입
로그인
Toggle navigation
문제
문제
전체 문제
문제 출처
단계별로 풀어보기
알고리즘 분류
추가된 문제
문제 순위
문제
푼 사람이 한 명인 문제
아무도 못 푼 문제
최근 제출된 문제
최근 풀린 문제
랜덤
출처
ICPC
Olympiad
한국정보올림피아드
한국정보올림피아드시․도지역본선
전국 대학생 프로그래밍 대회 동아리 연합
대학교 대회
카카오 코드 페스티벌
Coder's High
ICPC
Regionals
World Finals
Korea Regional
Africa and the Middle East Regionals
Europe Regionals
Latin America Regionals
North America Regionals
South Pacific Regionals
문제집
대회
2
채점 현황
랭킹
게시판
그룹
더 보기
재채점 기록
블로그
강의
실험실
도움말
BOJ Stack
BOJ Book
전체
공지
자유
질문
오타/오역/요청
게시판 공지
홍보
업데이트
solved.ac
글쓰기
질문 도움말
자주묻는 질문
제발 한번만 봐주세요!!
2174번 - 로봇 시뮬레이션
smu04129
2년 전
0
도움을 주세요..
어디를 틀렸는지 못찾겠습니다..
#include <iostream> #define MAX 100 using namespace std; struct Robot { int y, x, d; }; //로봇 정보: 행, 열, 방향 int A, B, N, M; //세로, 가로, 로봇수, 명령어수 int Map[MAX][MAX]; //로봇을 표시해줄 맵 Robot List[MAX + 1]; //로봇들 int Dir[4][2] = { { -1, 0 }, { 0, 1 }, { 1, 0 }, { 0, -1 } }; //시계방향 회전 기준 북, 동, 남, 서 bool is_out(int y, int x) { if (y < 0 || y >= A || x < 0 || x >= B) { return true; } //범위를 벗어났는가 return false; } void carry_out(int r, char o, int n) { // 로봇 번호, 명령어, 빈복 횟수 auto ny = -1, nx = -1; //명령어 F의 경우 사용할 새좌표 위치 변수 if (o == 'L') { List[r].d = (List[r].d + 3 * n) % 4; } //반시계 90도 회전은 시계 회전 270도와 같다 그래서 + 3 으로 해줌 else if (o == 'R') { List[r].d = (List[r].d + 1 * n) % 4; } //시계 90도회전 + 1 else if (o == 'F') { ny = List[r].y + Dir[List[r].d][0] * n, nx = List[r].x + Dir[List[r].d][1] * n; } //이동 if (ny != -1 && nx != -1) { //명령어 F라면 if (is_out(ny, nx)) { cout << "Robot " << r << " crashes into the wall"; exit(0); } //범위밖으로 나간경우 if (Map[ny][nx] != 0) { cout << "Robot " << r << " crashes into robot " << Map[ny][nx]; exit(0); } //다른 로봇이랑 충돌 Map[List[r].y][List[r].x] = 0; //로봇 위치 갱신 List[r].y = ny, List[r].x = nx; //... Map[ny][nx] = r; //.. } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> B >> A; // 가로, 세로 cin >> N >> M; for (int i = 1; i <= N; i++) { char d; //방향 cin >> List[i].x >> List[i].y >> d; List[i].y--, List[i].x--; //좌표는 0부터 사용 List[i].y = A - 1 - List[i].y; //세로줄을 문제에선 위에서부터 4 3 2 1 순으로 쓰지만, 내코드는 1 2 3 4 순으로 써주기위함 if (d == 'E') { List[i].d = 1; } //방향을 숫자로 바꾸어줌 else if (d == 'W') { List[i].d = 3; } else if (d == 'S') { List[i].d = 2; } else if (d == 'N') { List[i].d = 0; } Map[List[i].y][List[i].x] = i; //맵에 로봇 표시 } for (int i = 1; i <= M; i++) { int robot, n; //명령을 받을 로봇 번호, 명령어 반복 횟수 char order; //명령어 종류 L, R, F cin >> robot >> order >> n; carry_out(robot, order, n); } cout << "OK"; }
댓글을 작성하려면
로그인
해야 합니다.
smu04129 2년 전
도움을 주세요..
어디를 틀렸는지 못찾겠습니다..