KoreanFoodie's Study
SW 역량테스트 - [백준] 뱀 문제 풀이/해답/코드 (C++ / JAVA) 본문
Data Structures, Algorithm/SW 역량테스트
SW 역량테스트 - [백준] 뱀 문제 풀이/해답/코드 (C++ / JAVA)
GoldGiver 2020. 10. 15. 23:32
SW 역량 테스트 준비를 위한 핵심 문제들을 다룹니다!
해답을 보기 전에 문제를 풀어보시거나, 설계를 하고 오시는 것을 추천드립니다.
코드에 대한 설명은 주석을 참고해 주세요 :)
문제 링크 : www.acmicpc.net/problem/3190
해답 코드 :
#include <iostream>
#include <algorithm>
#include <vector>
#include <deque>
using namespace std;
typedef struct turn {
int sec;
char dir;
}turn;
typedef struct pos {
int row;
int col;
}pos;
int N, K, L;
int map[101][101];
deque<turn> t_list;
deque<pos> snake;
// Up, Down, Left, Right
int dR[4] = {-1, 1, 0, 0};
int dC[4] = {0, 0, -1, 1};
int ans;
bool isRange(int i, int j) {
if (i < 0 || i >= N || j < 0 || j >= N) return false;
return true;
}
int change_dir(int ori_dir, char turn_dir) {
if (ori_dir == 0) {
if (turn_dir == 'L') return 2;
else return 3;
}
else if (ori_dir == 1) {
if (turn_dir == 'L') return 3;
else return 2;
}
else if (ori_dir == 2) {
if (turn_dir == 'L') return 1;
else return 0;
}
else {
if (turn_dir == 'L') return 0;
else return 1;
}
}
void snake_game(int cnt, int dir) {
// Move according to the rules
pos n_pos;
n_pos.row = snake[0].row + dR[dir];
n_pos.col = snake[0].col + dC[dir];
// terminator
if (!isRange(n_pos.row, n_pos.col)) {
ans = cnt;
return;
}
for (int i = 0; i < snake.size(); i++) {
if ((n_pos.row == snake[i].row) && (n_pos.col == snake[i].col)) {
ans = cnt;
return;
}
}
// if there is an apple
if (map[n_pos.row][n_pos.col] == 1) {
map[n_pos.row][n_pos.col] = 0;
snake.push_front(n_pos);
} // no apple
else {
snake.pop_back();
snake.push_front(n_pos);
}
// change direction
int chn_dir = dir;
if (!t_list.empty() && t_list[0].sec == cnt) {
chn_dir = change_dir(dir, t_list[0].dir);
t_list.pop_front();
}
snake_game(cnt+1, chn_dir);
}
int main() {
cin >> N;
cin >> K;
int t_r, t_c;
int t_s;
char t_t;
ans = 0;
for (int i = 0; i < K; i++) {
cin >> t_r >> t_c;
map[t_r-1][t_c-1] = 1;
}
cin >> L;
turn t_temp;
for (int i = 0; i < L; i++) {
cin >> t_s;
cin >> t_t;
t_temp = { t_s, t_t };
t_list.push_back(t_temp);
}
int cnt, dir;
pos temp = { 0, 0 };
snake.push_back(temp);
snake_game(1, 3);
cout << ans << endl;
}
SW 역량테스트 준비 - [모의 SW 역량테스트] 풀이 / 코드 / 답안 (C++ / JAVA)
SW 역량테스트 준비 - C++ 코드, Java 코드
SW 역량테스트 준비 - 백준 알고리즘 문제
'Data Structures, Algorithm > SW 역량테스트' 카테고리의 다른 글
SW 역량테스트 - [백준] 주사위 굴리기 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.10.15 |
---|---|
SW 역량테스트 - [백준] 시험감독 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.10.15 |
SW 역량테스트 - [백준] 2048 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.10.15 |
SW 역량테스트 - [백준] 구슬탈출2 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.09.30 |
SW 역량테스트 - [모의 SW 역량테스트] 원자 소멸 시뮬레이션 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.09.29 |
Comments