일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- #알고리즘 #백준 #2616 #백준2616 #algorithm #baekjoon #baekjoon2616 #Java
- #알고리즘 #백준 #1987 #백준1987 #algorithm #baekjoon #baekjoon1987 #Java
- 책리뷰
- 개발자취미
- #알고리즘 #백준 #1793 #백준1793 #algorithm #baekjoon #baekjoon1793 #C++
- CleanCode
- #알고리즘 #백준 #3190 #백준3190 #algorithm #baekjoon #baekjoon3190 #C++
- #알고리즘 #algorithm #프로그래머스 #2020카카오공채 #괄호변환 #programmers #C++
- #알고리즘 #백준 #17136 #백준17136 #algorithm #baekjoon #baekjoon17136 #C++
- #알고리즘 #백준 #17837 #백준17837 #algorithm #baekjoon #baekjoon17837 #C++
- 개발서
- #알고리즘 #백준 #2580 #백준2580 #algorithm #baekjoon #baekjoon2580 #Java
- #알고리즘 #algorithm #프로그래머스 #2020카카오공채 #블록이동하기 #programmers #C++
- #알고리즘 #백준 #17472 #백준17472 #algorithm #baekjoon #baekjoon17472 #C++
- 스레드 #동시성 #thread #process #
- #알고리즘 #백준 #15683 #백준15683 #algorithm #baekjoon #baekjoon15683 #C++
- #알고리즘 #백준 #12094 #백준12094 #algorithm #baekjoon #baekjoon12094 #C++
- #알고리즘 #백준 #4386 #백준4386 #algorithm #baekjoon #baekjoon4386 #C++
- #알고리즘 #백준 #1525 #백준1525 #algorithm #baekjoon #baekjoon1525 #C++
- #알고리즘 #백준 #1260 #백준1260 #algorithm #baekjoon #baekjoon1260 #Java
- #알고리즘 #백준 #17406 #백준17406 #algorithm #baekjoon #baekjoon17406 #C++
- #알고리즘 #algorithm #프로그래머스 #2020카카오공채 #문자열압축 #programmers #C++
- #알고리즘 #백준 #2352 #백준2352 #algorithm #baekjoon #baekjoon2352 #C++
- #알고리즘 #백준 #15684 #백준15684 #algorithm #baekjoon #baekjoon15684 #C++
- #알고리즘 #백준 #14888 #백준14888 #algorithm #baekjoon #baekjoon14888 #C++
- #알고리즘 #백준 #17140 #백준17140 #algorithm #baekjoon #baekjoon17140 #C++
- 클린코드
- #알고리즘 #백준 #2573 #백준2573 #algorithm #baekjoon #baekjoon2573 #C++
- #알고리즘 #algorithm #프로그래머스 #2020카카오공채 #외벽점검 #programmers #C++
- #알고리즘 #백준 #5214 #백준5214 #algorithm #baekjoon #baekjoon5214 #C++
Archives
- Today
- Total
개발자 일기장.
백준 3190. 뱀 본문
3190. 뱀
문제 알고리즘
- 시뮬레이션
풀이방법
문제에서 요구하는 대로 순서를 나눠서 풀면 쉬운 문제
다음 위치 지정
밖을 나가거나 자기 몸을 무는 경우 종료
다음 위치가 사과가 아니면 꼬리 제거
전진
방향 바꾸기
핵심 코드
#include <iostream>
#include <deque>
#include <map>
using namespace std;
#define MAX 100 + 1
enum {BLANK, SNAKE, APPLE};
pair<int, int> dir[4] = { {0, 1}, {1, 0}, {0, -1}, {-1, 0} }; // R, D, L, U
int N, K, L;
int board[MAX][MAX];
deque<pair<int, int>> snake;
map<int, char> comm;
int main() {
// input
cin >> N;
cin >> K;
for (int i = 0; i < K; i++) {
int r, c;
scanf("%d %d", &r, &c);
board[r][c] = APPLE;
}
cin >> L;
for (int i = 0; i < L; i++) {
int t, d;
scanf("%d %c", &t, &d);
comm.insert({ t, d });
}
// solution
board[1][1] = SNAKE;
snake.push_back({ 1, 1 });
int answer = 0, d = 0;
while (true) {
answer++;
// y, x는 다음 위치
int nextY = snake[0].first + dir[d].first;
int nextX = snake[0].second + dir[d].second;
// 밖을 나가거나, 자기 몸을 무는 경우. 종료
if (nextY < 1 || nextY > N || nextX < 1 || nextX > N || board[nextY][nextX] == SNAKE) {
break;
}
// 다음 위치가 사과가 아니면 꼬리 제거
if (board[nextY][nextX] != APPLE) {
pair<int, int> tail = snake[snake.size() - 1];
snake.pop_back();
board[tail.first][tail.second] = BLANK;
}
// 전진
board[nextY][nextX] = SNAKE;
snake.push_front({ nextY, nextX });
// 방향 바꾸기
if (comm.find(answer) != comm.end()) { // 찾은 경우
if (comm.find(answer)->second == 'L')
d = (d + 3) % 4;
else
d = (d + 1) % 4;
}
}
// output
cout << answer << "\n";
return 0;
}
문제 후 느낀점
- 쉬운 문제.
'취업 > Algorithm.' 카테고리의 다른 글
백준 5214. 환승 (0) | 2020.05.30 |
---|---|
백준 2616. 소형기관차 (0) | 2020.05.30 |
백준 2580. 스도쿠 (0) | 2020.05.30 |
백준 2532. 반도체 설계 (0) | 2020.05.30 |
백준 1987. 알파벳 (0) | 2020.05.30 |